> For the complete documentation index, see llms.txt.
Skip to main content

Check out Port for yourself ➜ 

Claude managed agents

Loading version...

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.

GitHub repository resources

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

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.baseUrl you configured during installation.

To set up the webhook:

  1. In the Claude Console, go to Manage > Webhooks and click Add webhook endpoint.
  2. Paste the endpoint URL.
  3. Under Events to subscribe, enable:
    • session.status_idled
    • session.status_terminated
    • vault.created
    • vault.archived
    • vault.deleted
  4. Copy the signing secret shown at the end and set it as webhookSigningSecret in your integration settings.
Signature verification is optional

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.