Skip to main content
Humanos exposes a remote Model Context Protocol (MCP) server that lets AI assistants interact with your organization’s agents, mandates, and authorization flows directly from the tools they already use.
Endpoint: https://mcp.humanos.tech

What it does

The Humanos MCP server gives AI clients secure, scoped access to the Humanos platform. Through it, an assistant can:
  • Register and inspect agents affiliated with your organization
  • Request, poll, and manage mandates on behalf of an agent
  • Verify tool calls against a mandate’s policy and report outcomes
  • Browse an agent’s signed actor chain and cryptographic snapshots
  • Propose new actions for your organization to publish
Authentication follows the same two paths as the REST API: organization API keys (with HMAC-signed requests) or OAuth access tokens issued by the Humanos authorization server.

Supported clients

Any MCP-compatible client can connect. The following have been tested:
  • Claude Code
  • Claude Desktop
  • Cursor
  • VS Code (with GitHub Copilot)
  • Grok
  • ChatGPT Desktop
  • Windsurf
  • Codex CLI

Setup

Pick the tab that matches your client.
Add the Humanos MCP server from your terminal:
Then start Claude Code and authenticate the connection:
Inside the session, run /mcp to confirm the server is connected and list the available tools.

Verifying the connection

Once connected, ask your assistant to run the server_info tool. A successful response returns the server’s identity, the MCP protocol version, and the authenticated subject, confirming that authentication and transport are working.

Authentication

The MCP server accepts two credential types: OAuth clients discover the authorization server automatically through the RFC 9728 protected-resource metadata at https://mcp.humanos.tech/.well-known/oauth-protected-resource.

Security considerations

  • Always verify the endpoint. Confirm you are connecting to https://mcp.humanos.tech, never a third-party proxy or relay.
  • Scope is enforced server-side. Every query is scoped to your authenticated organization. A DID outside your scope is indistinguishable from one that does not exist.
  • Enable human-in-the-loop confirmation. Most MCP clients support a confirmation step before executing tools. Keep it enabled, especially for tools that create or modify mandates.
  • Review tool permissions. When connecting through a new client, audit which tools are exposed and what data each one can access.

Tools

18 tools registered on the Humanos MCP connector (v0.3.0).

server_info

Title: Check your connection Description: Check your connection to Humanos. Returns the server version, your authenticated identity, what this credential can do, and which tools are available. No arguments needed. Annotations: readOnly Parameters: None

onboard

Title: Start here Description: ALWAYS call this FIRST when you connect to Humanos, before any other tool. It detects your progress and returns the exact next step. Call it again after each step. Annotations: readOnly Parameters: None

list_agents

Title: List agents Description: List the agents registered under your organization, newest first, one page at a time. totalPages says how many pages there are; ask for the next with pageIndex. Annotations: readOnly Parameters:

get_events

Title: Get event history Description: Get the event history of an actor — an agent, an organization or a person — or of a mandate, by its credential URN, oldest first, one page at a time. Each event is cryptographically linked to the previous one. Use this when you need the audit trail. Annotations: readOnly Parameters:

get_actor

Title: Get actor details Description: Get an actor — an agent, an organization or a person: its VIAActor record under record (status, keys, verification level, accreditation, aliases and, for an agent, the organization it acts for; null while its registration is queued), the date of its last event, pending — true while an event of it is accepted and not yet on its chain, which the record already shows — and the actors merged into it. Use this to check an actor before interacting with it. Annotations: readOnly Parameters:

challenge

Title: Get a verification nonce Description: Get a single-use nonce before calling verify or report_outcome. Required before EVERY verification or outcome report; each nonce can only be used once. Requires an organization API key. Annotations: readOnly Parameters:

verify

Title: Verify a tool call against a mandate Description: Check whether an agent is allowed to call a specific tool with specific parameters under a mandate. Returns one of three answers:
  • allow: proceed with the tool call, then report the outcome with report_outcome.
  • deny: the call is not permitted under this mandate. Do not retry.
  • rechallenge: the person must co-approve this specific call. Show them the stepUp.approveLink, poll stepup_status until approved, then call verify again with the same parameters plus stepUpId. For custodial agents (registered with no key), omit pop as the platform signs automatically.
Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false Parameters:

stepup_status

Title: Check step-up approval status Description: Check whether a person has approved a step-up request. Returns: pending, approved, declined, expired, or consumed. After ‘approved’, call verify again with the same parameters plus the stepUpId. Annotations: readOnly Parameters:

report_outcome

Title: Report tool call result Description: After verify allowed a tool call, report whether it succeeded or failed. This completes the verify-then-act cycle: call verify first, execute the tool, then report here. For custodial agents, omit pop as the platform signs automatically. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false Parameters:

get_mandate

Title: Get agent mandates Description: Get all active mandates for an agent. Each comes in the credential’s shape — its status, the uses it has left (executionsRemaining) and the signed VC under w3cCredential (again under mandate, the name earlier clients read) — with the published action it pins under action: its rules, parameters and limits, so you know what the agent is authorized to do. Call this at startup to discover available permissions. Annotations: readOnly Parameters:

declare_client

Title: Declare your identity Description: Record which AI model and host application you are (e.g. model: “claude-sonnet-5”, host: “Cursor”). Shown to operators for transparency. Call once after connecting. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false Parameters:

declare_tools

Title: Declare your tools Description: Report every tool you can call to the organization, so it can put guardrails on them. Do NOT include this Humanos server’s own tools (onboard, declare_tools, propose_action, verify and the rest): they are never recorded. For each tool, copy what your host knows about it VERBATIM, never paraphrased or summarized: its name exactly as its server defines it; its title; its full description; its inputSchema, the whole JSON Schema object, with every property, nested object, enum, format, range, default and required list; its outputSchema when it has one; its MCP annotations (title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint); and the service it comes from (the MCP server or app, as your host names it, e.g. “Slack”, “Gmail”, “Google Calendar”). Long text is cut and recorded as cut, never refused; a malformed tool is skipped and reported, and the rest are recorded. Up to 500 tools per call: declare each service in one call. Declaring again updates the list for the named services, so you can declare one service at a time: a tool you leave out is kept and marked as no longer declared, never deleted, and two services may each have a tool of the same name. To say a service has no tools any more, name it in services and send none of its tools. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false Parameters:

list_mandate_kinds

Title: List available mandate types Description: See what types of mandates you can request. Two categories:
  • authorization: a simple approval where the person agrees to terms you describe in plain language.
  • policy: bound to a published action with rules and parameter limits the person controls. Also shows draft actions awaiting publication by the organization.
Annotations: readOnly Parameters: None

request_mandate

Title: Request a mandate from a person Description: Request permission from a person to act under a guardrail.
  • For authorization: provide name and terms describing what you will do in plain language.
  • For policy: provide the actionId from a published action and the userParams values.
  • grantor.contact: use the connected person’s email from the server instructions. Do not ask the user for it. Returns a consentCard with a link to show the person. They approve on their own device with a verification code. Poll mandate_status until ACTIVE, then use get_mandate to see the mandate details.
Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true Parameters:

propose_action

Title: Propose a guardrail for the organization Description: Propose a new action (guardrail template) for the organization to review and publish. Include the tools it covers, their parameters, and which values the person controls (role “grantor”). You may propose CEL rules that enforce limits (e.g. userParams.maxAmount >= executionParams.amount). IMPORTANT: Write ALL descriptions in plain, non-technical language a regular person can understand:
  • Parameter descriptions: explain what the setting does in everyday terms (e.g. “Maximum number of messages the agent can send before asking again”, NOT “Upper bound for messageCount”).
  • Rule descriptions: explain the protection simply (e.g. “Prevents the agent from sending more messages than you allowed”).
  • Action description: one sentence explaining what this guardrail controls.
The person reviews and publishes through the Humanos dashboard. Once published, it appears in list_mandate_kinds. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false Parameters:

mandate_status

Title: Check mandate status Description: Check the status of a mandate request. Returns PENDING (waiting for approval), ACTIVE (ready to use), or REFUSED. Annotations: readOnly Parameters:

register_challenge

Title: Start agent registration Description: Step 1 of agent registration: get a single-use nonce and aud, the platform DID. An SDK agent then signs a via-reg+jwt over both with its P-256 key and calls register. Requires an organization API key. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false Parameters: None

register

Title: Register an agent Description: Step 2 of agent registration. Two modes:
  • With a key (SDK agents): pass publicKeyJwk, evidence, and regNonce. You hold the private key, and the evidence proves it (proof).
  • Without a key (custodial): call with no arguments. The platform creates and holds the key for you. Returns the agent DID and key id. Requires an organization API key.
Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false Parameters: