A Model Context Protocol (MCP) server for managing Ambient Code Platform (ACP) sessions via the public-api gateway.
- Quick Start
- Features
- Installation
- Configuration
- Usage
- Tool Reference
- Troubleshooting
- Architecture
- Security
- Development
- Roadmap
- Contributing
- Status
# Install
git clone https://github.com/ambient-code/mcp
pip install dist/mcp_acp-*.whl
# Configure
mkdir -p ~/.config/acp
cat > ~/.config/acp/clusters.yaml <<EOF
clusters:
my-cluster:
server: https://public-api-ambient.apps.your-cluster.example.com
token: your-bearer-token-here
default_project: my-workspace
default_cluster: my-cluster
EOF
chmod 600 ~/.config/acp/clusters.yamlThen add to your MCP client (Claude Desktop, Claude Code, or uvx) and try:
List my ACP sessions
| Tool | Description |
|---|---|
acp_list_sessions |
List/filter sessions by status, age, with sorting and limits |
acp_get_session |
Get detailed session information by ID |
acp_create_session |
Create sessions with custom prompts, repos, model selection, and timeout |
acp_create_session_from_template |
Create sessions from predefined templates (triage/bugfix/feature/exploration) |
acp_delete_session |
Delete sessions with dry-run preview |
acp_restart_session |
Restart a stopped session |
acp_clone_session |
Clone an existing session's configuration into a new session |
acp_update_session |
Update session metadata (display name, timeout) |
| Tool | Description |
|---|---|
acp_get_session_logs |
Retrieve container logs for a session |
acp_get_session_transcript |
Retrieve conversation history (JSON or Markdown) |
acp_get_session_metrics |
Get usage statistics (tokens, duration, tool calls) |
| Tool | Description |
|---|---|
acp_label_resource |
Add labels to a session for organizing and filtering |
acp_unlabel_resource |
Remove labels from a session by key |
acp_list_sessions_by_label |
List sessions matching label selectors |
acp_bulk_label_resources |
Add labels to multiple sessions (max 3) |
acp_bulk_unlabel_resources |
Remove labels from multiple sessions (max 3) |
| Tool | Description |
|---|---|
acp_bulk_delete_sessions |
Delete multiple sessions (max 3) with confirmation and dry-run |
acp_bulk_stop_sessions |
Stop multiple running sessions (max 3) |
acp_bulk_restart_sessions |
Restart multiple stopped sessions (max 3) |
acp_bulk_delete_sessions_by_label |
Delete sessions matching label selectors (max 3 matches) |
acp_bulk_stop_sessions_by_label |
Stop sessions matching label selectors (max 3 matches) |
acp_bulk_restart_sessions_by_label |
Restart sessions matching label selectors (max 3 matches) |
| Tool | Description |
|---|---|
acp_list_clusters |
List configured cluster aliases |
acp_whoami |
Check current configuration and authentication status |
acp_switch_cluster |
Switch between configured clusters |
acp_login |
Authenticate to a cluster with a Bearer token |
Safety Features:
- Dry-Run Mode — All mutating operations support
dry_runfor safe preview before executing - Bulk Operation Limits — Maximum 3 items per bulk operation with confirmation requirement
- Label Validation — Labels must be 1-63 alphanumeric characters, dashes, dots, or underscores
pip install dist/mcp_acp-*.whlgit clone https://github.com/ambient-code/mcp
cd mcp
uv pip install -e ".[dev]"Requirements:
- Python 3.10+
- Bearer token for the ACP public-api gateway
- Access to an ACP cluster
Create ~/.config/acp/clusters.yaml:
clusters:
vteam-stage:
server: https://public-api-ambient.apps.vteam-stage.example.com
token: your-bearer-token-here
description: "V-Team Staging Environment"
default_project: my-workspace
vteam-prod:
server: https://public-api-ambient.apps.vteam-prod.example.com
token: your-bearer-token-here
description: "V-Team Production"
default_project: my-workspace
default_cluster: vteam-stageThen secure the file:
chmod 600 ~/.config/acp/clusters.yamlAdd your Bearer token to each cluster entry under the token field, or set the ACP_TOKEN environment variable:
export ACP_TOKEN=your-bearer-token-hereGet your token from the ACP platform administrator or the gateway's authentication endpoint.
Edit your configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"acp": {
"command": "mcp-acp",
"args": [],
"env": {
"ACP_CLUSTER_CONFIG": "${HOME}/.config/acp/clusters.yaml"
}
}
}
}After editing, completely quit and restart Claude Desktop (not just close the window).
claude mcp add mcp-acp -t stdio mcp-acpuvx provides zero-install execution — no global Python pollution, auto-caching, and fast startup.
# Install uv (if needed)
curl -LsSf https://astral.sh/uv/install.sh | shClaude Desktop config for uvx:
{
"mcpServers": {
"acp": {
"command": "uvx",
"args": ["mcp-acp"]
}
}
}For a local wheel (before PyPI publish):
{
"mcpServers": {
"acp": {
"command": "uvx",
"args": ["--from", "/full/path/to/dist/mcp_acp-0.1.0-py3-none-any.whl", "mcp-acp"]
}
}
}# List sessions
List my ACP sessions
Show running sessions in my-workspace
List sessions older than 7 days in my-workspace
List sessions sorted by creation date, limit 20
# Session details
Get details for ACP session session-name
Show AgenticSession session-name in my-workspace
# Create a session
Create a new ACP session with prompt "Run all unit tests and report results"
# Create from template
Create an ACP session from the bugfix template called "fix-auth-issue"
# Restart / clone
Restart ACP session my-stopped-session
Clone ACP session my-session as "my-session-v2"
# Update session metadata
Update ACP session my-session display name to "Production Test Runner"
# Observability
Show logs for ACP session my-session
Get transcript for ACP session my-session in markdown format
Show metrics for ACP session my-session
# Labels
Label ACP session my-session with env=staging and team=platform
Remove label env from ACP session my-session
List ACP sessions with label team=platform
# Delete with dry-run (safe!)
Delete test-session from my-workspace in dry-run mode
# Actually delete
Delete test-session from my-workspace
# Bulk operations (dry-run first)
Delete these sessions: session-1, session-2, session-3 from my-workspace (dry-run first)
Stop all sessions with label env=test
Restart sessions with label team=platform
# Cluster operations
Check my ACP authentication
List my ACP clusters
Switch to ACP cluster vteam-prod
Login to ACP cluster vteam-stage with token
Include one of these keywords so your MCP client routes the request to ACP: ACP, ambient, AgenticSession, or use tool names directly (e.g., acp_list_sessions, acp_whoami). Without a keyword, generic phrases like "list sessions" may not trigger the server.
| Task | Command Pattern |
|---|---|
| Check auth | Use acp_whoami |
| List all | List ACP sessions in PROJECT |
| Filter status | List running sessions in PROJECT |
| Filter age | List sessions older than 7d in PROJECT |
| Get details | Get details for ACP session SESSION |
| Create | Create ACP session with prompt "..." |
| Create from template | Create ACP session from bugfix template |
| Restart | Restart ACP session SESSION |
| Clone | Clone ACP session SESSION as "new-name" |
| Update | Update ACP session SESSION timeout to 1800 |
| View logs | Show logs for ACP session SESSION |
| View transcript | Get transcript for ACP session SESSION |
| View metrics | Show metrics for ACP session SESSION |
| Add labels | Label ACP session SESSION with env=test |
| Remove labels | Remove label env from ACP session SESSION |
| Filter by label | List ACP sessions with label team=platform |
| Delete (dry) | Delete SESSION in PROJECT (dry-run) |
| Delete (real) | Delete SESSION in PROJECT |
| Bulk delete | Delete session-1, session-2 in PROJECT |
| Bulk by label | Stop sessions with label env=test |
| List clusters | Use acp_list_clusters |
| Login | Login to ACP cluster CLUSTER |
For complete API specifications including input schemas, output formats, and behavior details, see API_REFERENCE.md.
| Category | Tool | Description |
|---|---|---|
| Session | acp_list_sessions |
List/filter sessions |
acp_get_session |
Get session details | |
acp_create_session |
Create session with prompt | |
acp_create_session_from_template |
Create from template | |
acp_delete_session |
Delete with dry-run support | |
acp_restart_session |
Restart stopped session | |
acp_clone_session |
Clone session configuration | |
acp_update_session |
Update display name or timeout | |
| Observability | acp_get_session_logs |
Retrieve container logs |
acp_get_session_transcript |
Get conversation history | |
acp_get_session_metrics |
Get usage statistics | |
| Labels | acp_label_resource |
Add labels to session |
acp_unlabel_resource |
Remove labels by key | |
acp_list_sessions_by_label |
Filter sessions by labels | |
acp_bulk_label_resources |
Bulk add labels (max 3) | |
acp_bulk_unlabel_resources |
Bulk remove labels (max 3) | |
| Bulk | acp_bulk_delete_sessions |
Delete multiple sessions (max 3) |
acp_bulk_stop_sessions |
Stop multiple sessions (max 3) | |
acp_bulk_restart_sessions |
Restart multiple sessions (max 3) | |
acp_bulk_delete_sessions_by_label |
Delete by label (max 3) | |
acp_bulk_stop_sessions_by_label |
Stop by label (max 3) | |
acp_bulk_restart_sessions_by_label |
Restart by label (max 3) | |
| Cluster | acp_list_clusters |
List configured clusters |
acp_whoami |
Check authentication status | |
acp_switch_cluster |
Switch cluster context | |
acp_login |
Authenticate with Bearer token |
Your token is not configured. Either:
- Add
token: your-token-hereto your cluster in~/.config/acp/clusters.yaml - Set the
ACP_TOKENenvironment variable
Your token is expired or invalid. Get a new token from the ACP platform administrator.
You don't have permission for this operation. Contact your ACP platform administrator.
You're using a direct K8s API URL. Use the public-api gateway URL instead:
- Wrong:
https://api.cluster.example.com:6443 - Correct:
https://public-api-ambient.apps.cluster.example.com
Add Python user bin to PATH:
- macOS:
export PATH="$HOME/Library/Python/3.*/bin:$PATH" - Linux:
export PATH="$HOME/.local/bin:$PATH"
Then restart your shell.
- Check Claude Desktop logs: Help → View Logs
- Verify config file syntax is valid JSON
- Make sure
mcp-acpis in PATH - Restart Claude Desktop completely (quit, not just close)
chmod 600 ~/.config/acp/clusters.yaml
chmod 700 ~/.config/acp- MCP SDK — Standard MCP protocol implementation (stdio transport)
- httpx — Async HTTP REST client for the public-api gateway
- Pydantic — Settings management and input validation
- Three-layer design — Server (tool dispatch) → Client (HTTP + validation) → Formatters (output)
See CLAUDE.md for complete system design.
- Input Validation — DNS-1123 format validation for all resource names
- Gateway URL Enforcement — Direct K8s API URLs (port 6443) rejected
- Bearer Token Security — Tokens filtered from logs, sourced from config or environment
- Resource Limits — Bulk operations limited to 3 items with confirmation
See SECURITY.md for complete security documentation including threat model and best practices.
# One-time setup
uv venv && uv pip install -e ".[dev]"
# Pre-commit workflow
uv run ruff format . && uv run ruff check . && uv run pytest tests/
# Run with coverage
uv run pytest tests/ --cov=src/mcp_acp --cov-report=html
# Build wheel
uvx --from build pyproject-build --installer uvSee CLAUDE.md for contributing guidelines.
Current implementation provides 26 tools. 3 tools remain planned:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass (
uv run pytest tests/) - Ensure code quality checks pass (
uv run ruff format . && uv run ruff check .) - Submit a pull request
Code: Production-Ready | Tests: All Passing | Security: Input validation, gateway enforcement, token security | Tools: 26 implemented (3 more planned)
- API_REFERENCE.md — Full API specifications for all 26 tools
- SECURITY.md — Security features, threat model, and best practices
- CLAUDE.md — System architecture and development guide
MIT License — See LICENSE file for details.
For issues and feature requests, use the GitHub issue tracker.