Incarna文档GitHub控制台

MCP

Incarna 通过 HTTP 讲 Model Context Protocol。把一个 agent 运行时指向一个 URL, REST API 里的每一项能力都会变成一个工具 —— 一共二十三个。

https://api.incarna.io/mcp

传输方式是 streamable HTTP,无状态。无状态是刻意的:API 跑在负载均衡器后面, 一个绑定在某个实例内存里的会话,会在第二个实例出现的那一刻就坏掉 —— 而且是间歇性地坏,这是最糟糕的坏法。

本页是工具参考。至于真正要写进 Claude Code、Codex、Hermes、OpenClaw 或 Franklin 的配置 —— 它们各自想要不同格式的不同文件 —— 见 在你的 agent 里使用

连接

两个值,不管你的客户端怎么问:上面那个 URL,以及 Authorization 头里的一个静态 bearer 令牌。 没有要登录的 OAuth 流程,也没有需要保活的会话。

只接受 API 密钥。 控制台的会话路径在这里不被接受 —— 那条路径是一份由浏览器层持有的共享密钥,而 MCP 的调用方是程序, 应当携带一份可以被单独撤销的凭据。

组织身份在每一次调用时都从 bearer 令牌重新解析,从不缓存。 一个进程服务所有客户,所以缓存第一个调用方的组织,就等于把他们的 agent 交给之后的每一个人 —— 而且每一个响应看起来都还是对的。

验证连接

curl -X POST https://api.incarna.io/mcp/ \
  -H "Authorization: Bearer $INCARNA_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

响应可能是 JSON,也可能是单事件的 SSE 流;两者都合法,客户端应当都能处理。

tools/list 不需要密钥就能回答 —— 一份目录不是客户数据。而每一次工具调用都要认证, 没有密钥、或密钥无效的调用会被拒绝,而不是被塞给环境里的默认组织。 因此一个没有配置该请求头的客户端,会显示出完整的工具列表,然后在第一次使用时失败。

工具

身体

工具 参数
create_agent name, region="us", device="auto", direction=""
list_agents
get_agent agent_id
delete_agent agent_id

参考

工具 参数
list_countries
list_devices

绑定账号

通过平台自己的授权页,绑定客户拥有的账号。connect_account 是少数几个 你无法独自据其行动的工具之一 —— 只有一个已登录的人能批准这项授权。 见绑定账号

工具 参数
list_connectable_platforms
connect_account agent_id, platform
connection_status connection_id
list_connections agent_id, limit=20
unbind_account agent_id, account_id

unbind_account 会在平台提供端点的情况下撤销授权、遗忘凭据, 并把账号释放出来可以再次绑定。它不可逆 —— 重新绑定需要再走一遍授权页 —— 所以 agent 应当先跟它的人确认。 响应里的 revocation 字段会说明平台是否接受了这次撤销,还是仍需在那边手工处理。

邮件

工具 参数
attach_email agent_id, address=""
send_email agent_id, to, subject, body
read_inbox agent_id, limit=10

X

工具 参数
import_x agent_id, handle, auth_token, ct0, login_cookie
post_tweet agent_id, account_id, text
draft_post agent_id, account_id, text

draft_post 撰写一条帖子并为人类保留,由他们在控制台批准、编辑或丢弃。 它自己不发布任何东西。

你自己的密钥用 post_tweet 直接发布;对你运行的 agent 来说这里什么都没变。 唯一必须走草稿的调用方,是我们 Playground 里的助手 —— 它是在一段对话中代表别人行动的,对它来说 post_tweet 会被拒绝, 因为一张 agent 能绕过去的审批卡片不是审批。

GitHub

工具 参数
attach_github agent_id, token, totp_secret=""
github_totp agent_id, account_id
github_act agent_id, account_id, action,以及该动作特有的字段

github_act 的动作:post · comment · repo · profile · follow · star

Reddit

工具 参数
attach_reddit agent_id, client_id, client_secret, username, password
reddit_act agent_id, account_id, action,以及该动作特有的字段

reddit_act 的动作:post · comment · vote

价格

工具 参数
x402_pricing
x402_quote tool

它们的存在,是为了让一个有预算的 agent 能在行动之前知道价格, 也为了让同样的数字无论通过 MCP 还是普通 HTTP 都能被发现。

{
  "enabled": true,
  "network": "eip155:84532",
  "prices": {
    "identity.x.post": "$0.05",
    "identity.email.send": "$0.02",
    "identity.email.inbox": "$0.01",
    "identity.github.act": "$0.05",
    "identity.reddit.act": "$0.05"
  },
  "pay_to": "0xCa1fBb1900e1C17Cc443e34f312720960E72a83F"
}

MCP 的工具调用记在发起它的那把 API 密钥上。无账户、按次付费是 HTTP 那一侧的接口 —— 见 x402

stdio

本地开发时同一个 server 也能跑在 stdio 上,服务 INCARNA_API_KEY 所属的那一个组织:

cd apps/api && INCARNA_API_KEY=ik_live_... python3 -m incarna.mcp_server

设置 INCARNA_AUTH_DISABLED=1 可以不带密钥使用默认组织。仅限本地 —— 它会移除租户隔离。