Was this page helpful?
Puedes montar un repositorio de GitHub en el contenedor de tu sesión y conectarte al GitHub MCP para crear pull requests.
Los repositorios de GitHub se almacenan en caché, por lo que las sesiones futuras que usen el mismo repositorio se inician más rápido.
Todas las solicitudes a la API de Managed Agents requieren el encabezado beta managed-agents-2026-04-01. El SDK establece el encabezado beta automáticamente.
Primero, crea un agente que declare el servidor GitHub MCP. La definición del agente contiene la URL del servidor pero no el token de autenticación:
agent_id=$(curl -fsS https://api.anthropic.com/v1/agents \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
--data @- <<JSON | jq -r '.id'
{
"name": "Code Reviewer",
"model": "claude-sonnet-4-6",
"system": "You are a code review assistant with access to GitHub.",
"mcp_servers": [
{
"type": "url",
"name": "github",
"url": "https://api.githubcopilot.com/mcp/"
}
],
"tools": [
{"type": "agent_toolset_20260401"},
{
"type": "mcp_toolset",
"mcp_server_name": "github"
}
]
}
JSON
)Luego crea una sesión que monte el repositorio de GitHub:
El resources[].authorization_token autentica la operación de clonación del repositorio y no se devuelve en las respuestas de la API.
Al proporcionar un token de GitHub, utiliza los permisos mínimos requeridos:
| Acción | Alcances requeridos |
|---|---|
| Clonar repositorios privados | repo |
| Crear PRs | repo |
| Leer issues | repo (privado) o public_repo |
| Crear issues | repo (privado) o public_repo |
Usa tokens de acceso personal de grano fino con los permisos mínimos requeridos. Evita usar tokens con acceso amplio a tu cuenta de GitHub.
Monta múltiples repositorios agregando entradas al array resources:
Después de crear una sesión, puedes listar sus recursos de repositorio y rotar sus tokens de autorización. Cada recurso tiene un id que se devuelve en el momento de la creación de la sesión (o a través de resources.list) que usas para las actualizaciones. Los repositorios están adjuntos durante toda la vida útil de la sesión; para cambiar qué repositorios están montados, crea una nueva sesión.
Con el servidor GitHub MCP, el agente puede crear ramas, confirmar cambios y enviarlos:
session_id=$(curl -fsS https://api.anthropic.com/v1/sessions \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
--data @- <<JSON | jq -r '.id'
{
"agent": "$agent_id",
"environment_id": "$environment_id",
"resources": [
{
"type": "github_repository",
"url": "https://github.com/org/repo",
"mount_path": "/workspace/repo",
"authorization_token": "ghp_your_github_token"
}
]
}
JSON
)resources='[
{
"type": "github_repository",
"url": "https://github.com/org/frontend",
"mount_path": "/workspace/frontend",
"authorization_token": "ghp_your_github_token"
},
{
"type": "github_repository",
"url": "https://github.com/org/backend",
"mount_path": "/workspace/backend",
"authorization_token": "ghp_your_github_token"
}
]'# List resources on the session
repo_resource_id=$(curl -fsS "https://api.anthropic.com/v1/sessions/$session_id/resources" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" | jq -r '.data[0].id')
echo "$repo_resource_id" # "sesrsc_01ABC..."
# Rotate the authorization token
curl -fsS "https://api.anthropic.com/v1/sessions/$session_id/resources/$repo_resource_id" \
-o /dev/null \
--data @- <<JSON
{
"authorization_token": "ghp_your_new_github_token"
}
JSONcurl -fsS "https://api.anthropic.com/v1/sessions/$session_id/events" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: managed-agents-2026-04-01" \
-H "content-type: application/json" \
-o /dev/null \
--data @- <<JSON
{
"events": [
{
"type": "user.message",
"content": [
{
"type": "text",
"text": "Fix the type error in src/utils.ts, commit it to a new branch, and push it."
}
]
}
]
}
JSON