Claude managed agents
Port's Claude Managed Agents integration surfaces your Anthropic agents, environments, sessions, vaults, and memory stores in your Context Lake. From there, you can trigger agent sessions directly from Port workflows or let platform engineers create new agents through self-service forms.
Trigger a Claude agent
Use this workflow to start a new session or continue an existing one, and send a user message to the agent. See the Claude managed agents integration action page for the full workflow JSON and node field reference.
When a session includes a github_repository resource and githubAuthorizationToken is configured on the integration, the token is automatically injected so the session can clone and push to the repository. This works without the GitHub MCP server. To also open pull requests, the agent needs a vault with GitHub MCP credentials (see the MCP server setup section on the integration action page).
Create a Claude agent
Use this workflow to let platform engineers or developers create a new Claude managed agent through a self-service form. See the Claude managed agents integration action page for the full workflow JSON and node field reference.
MCP server setup
Agents can use Port MCP or GitHub MCP during sessions. Both require a Claude credential vault with the appropriate token. For the full credential setup steps, see MCP server setup on the integration action page.
Prerequisites
- An Anthropic API key.
- Your Port user role is set to
Admin.
Setup
Choose one of the installation methods below. If you are not sure which option to use, review the installation methods overview.
Configuration
Port integrations use a YAML mapping block to ingest data from the third-party API into Port.
The mapping uses the JQ JSON processor to transform fields and shape incoming Claude data into Port entities.
Webhook configuration
To enable real-time updates from Claude to Port, configure a webhook in the Claude Console. The webhook endpoint URL follows the format:
<base_url>/integration/webhook
Where <base_url> is:
- Hosted by Port: the live events base URL shown in the install step above.
- Self-hosted: the
liveEvents.baseUrlyou configured during installation.
To set up the webhook:
- In the Claude Console, go to Manage > Webhooks and click Add webhook endpoint.
- Paste the endpoint URL.
- Under Events to subscribe, enable:
session.status_idledsession.status_terminatedvault.createdvault.archivedvault.deleted
- Copy the signing secret shown at the end and set it as
webhookSigningSecretin your integration settings.
Configuring webhookSigningSecret is optional. When set, the integration validates the signature on every incoming webhook and rejects requests with an invalid or missing signature. When not set, incoming webhook requests are accepted without signature verification.
Default mapping configuration
Default mapping configuration (Click to expand)
resources:
- kind: environment
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"claude_environment"'
properties:
description: .description
scope: .scope
environmentType: .config.type
metadata: .metadata
createdAt: .created_at
updatedAt: .updated_at
archivedAt: .archived_at
- kind: vault
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: .display_name
blueprint: '"claude_vault"'
properties:
metadata: .metadata
createdAt: .created_at
updatedAt: .updated_at
archivedAt: .archived_at
- kind: memory-store
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"claude_memory_store"'
properties:
description: .description
metadata: .metadata
createdAt: .created_at
updatedAt: .updated_at
archivedAt: .archived_at
- kind: skill
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: '.display_title // .id'
blueprint: '"claude_skill"'
properties:
displayTitle: .display_title
source: .source
latestVersion: .latest_version
createdAt: .created_at
updatedAt: .updated_at
- kind: agent
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"claude_agent"'
properties:
description: .description
model: .model.id
system: .system
version: .version
metadata: .metadata
mcpServers: '[.mcp_servers[]?.name] // []'
createdAt: .created_at
updatedAt: .updated_at
archivedAt: .archived_at
relations:
skills: '[.skills[]? | select(.type == "custom") | .skill_id]'
delegateAgents: '[.multiagent.agents[]?.id] // []'
- kind: session
selector:
query: 'true'
port:
entity:
mappings:
identifier: .id
title: '.title // .id'
blueprint: '"claude_session"'
properties:
status: .status
inputTokens: .usage.input_tokens
outputTokens: .usage.output_tokens
cacheReadInputTokens: .usage.cache_read_input_tokens
activeSeconds: .stats.active_seconds
durationSeconds: .stats.duration_seconds
agentVersion: .agent.version
githubRepositories: '[.resources[]? | select(.type == "github_repository") | .url]'
metadata: .metadata
createdAt: .created_at
updatedAt: .updated_at
archivedAt: .archived_at
relations:
agent: .agent.id
environment: .environment_id
memoryStores: '[.resources[]? | select(.type == "memory_store") | .memory_store_id]'
vaults: .vault_ids
Mapping & examples per resource
To view and test the integration mapping against sample API responses, use the jq playground in your data sources page.
Monitoring and sync status
To learn more about how to monitor and check the sync status of your integration, see the relevant documentation.