Connections are added inside an Access bundle. At
claude.ai/admin-settings/claude-tag, open Access bundles in the left navigation, click into a bundle (or Create one), and go to its Credentials tab.Add a custom HTTP API
What you need from the service
- A service-account credential (an API key, token, or OAuth client) — not your personal login
- The API host (for example
api.example.com) - How the API authenticates (which header or flow it expects)
Fill out the Connect another tool form
Credential types
If you’re unsure which type, check the service’s API authentication docs for which header or flow it expects.
AWS SigV4
Use the AWS SigV4 credential type for AWS service APIs (S3, Lambda, Amazon Bedrock, an API Gateway endpoint with IAM authorization). Agent Proxy reads the AWS service and signing region from the hostname and signs each outbound request with the credential at the boundary, so neither the model nor the sandbox holds the keys. The host must be anamazonaws.com endpoint; the proxy can’t sign requests to an API Gateway custom domain or to a non-AWS API that uses Signature Version 4.
Use long-lived credentials from a dedicated IAM user where you can. Temporary STS credentials work but expire on their own schedule, and the connection stops working when they do; you re-enter all three values to rotate.
Claude can call the endpoint with
curl, an AWS SDK, or the AWS CLI. The sandbox holds no real AWS credentials, so a CLI or SDK signs the request with placeholder values; Agent Proxy strips that signature and re-signs with the stored credential before the request leaves for AWS. The one shape it can’t re-sign is chunked payload signing. If Claude reports that chunked signing isn’t supported through the proxy, have it set payload_signing_enabled = false in ~/.aws/config and retry.
When AWS returns SignatureDoesNotMatch
A SignatureDoesNotMatch response from AWS means the request AWS received doesn’t match the one Agent Proxy signed.
A dropped or expired session token is a different failure: AWS rejects it with a token error such as
InvalidClientTokenId, not SignatureDoesNotMatch. Rotate all three fields.
Add a custom MCP server
To give Claude an MCP server (one you run, or a vendor’s hosted MCP endpoint), the pattern is a plugin plus a credential:1
Add a plugin that declares the MCP server
In the bundle’s Plugins tab (or via your skills repository), add a plugin whose
.mcp.json points at the server URL. The plugin tells Claude the server exists and how to call it.2
Add a credential for the server's host
On the Credentials tab, click Connect another tool and add a credential for the MCP server’s host (for example, a Bearer token with Allowed websites set to
your-mcp-host.example.com). This lets the call leave the sandbox with auth attached..mcp.json is loaded because it’s part of an attached plugin; an .mcp.json checked into a repository Claude clones is not loaded.
Verify the connection
In a channel under the bundle’s scope, in a new thread, ask Claude to make a small read against the API:Related resources
- Give Claude access: the full connection model
- Allow a host without a credential: for public APIs that need no auth
- Allow all hosts: the egress option that lets Claude reach any public host without a credential