Agent 与 MCP 快速上手
本章用于在本地或测试站点跑通当前 Phase 3 能力。生产站点在完成 OAuth 2.1、 代理安全复核与真实客户端兼容验证前,仍应把 MCP 视为 Beta 能力。
1. 前置条件
- GoPress 已完成安装和数据库迁移。
site.url是客户端实际访问的规范 URL。- 生产环境使用 HTTPS;本机 HTTP 只使用 localhost/loopback。
- 你拥有插件管理和 MCP 设置所需的超级管理员权限。
- 使用支持远程 Streamable HTTP 的 MCP 客户端,或先用 curl 检查。
Agent Core 表会随 Core 迁移创建,不需要单独运行插件 SQL:
{prefix}agent_service_accounts
{prefix}agent_credentials
{prefix}agent_idempotency_records
{prefix}agent_audit_events
2. 激活官方 MCP 插件
进入后台「插件管理」,激活 GoPress MCP。激活会通过
routes.register 把 /mcp 和受保护的插件后台接口加入当前 Router;停用插件
后 Router 重建,这些入口消失。
打开:
/admin/plugins/gopress-mcp/settings
在「连接概览」确认:
- Endpoint 等于
{site.url}/mcp。 - Transport 为
Streamable HTTP (stateless)。 - 协议包含
2026-07-28与2025-11-25。 - HTTPS 诊断通过,或当前确实是本机 loopback 开发环境。
3. 签发只读 Credential
在「访问凭证」填写客户端名称,先保留默认 30 天有效期,并只选择实际需要的 只读 Scope:
gopress:site:read
gopress:content:read
gopress:taxonomy:read
gopress:media:read
Token 以 gp_agent_ 开头,只显示一次。立即保存到客户端 Secret Store 或临时
环境变量,不要写进仓库、截图或公开工单。
4. 配置 MCP 客户端
通用配置形态如下:
{
"mcpServers": {
"gopress": {
"type": "http",
"url": "https://example.com/mcp",
"headers": {
"Authorization": "Bearer gp_agent_REPLACE_WITH_TOKEN"
}
}
}
}
客户端可能使用不同的最外层配置结构,但不要修改 Endpoint 或 Bearer Header 的
语义。最新协议客户端直接协商 2026-07-28;仍使用初始化握手的客户端通过
2025-11-25 兼容通道连接。
5. 验证只读能力
连接成功后,依次执行:
gopress.site.get:确认站点 URL、语言、时区、Core 版本和 Agent Revision。gopress.content_types.list:查看当前注册 ContentType 及其字段声明。gopress.content.list:使用content_type: "post"查询已发布内容。gopress.content.get:用列表返回的id与同一content_type读取详情。
如果 tools/list 只返回部分 Tool,先不要把它当作异常。Tool 列表按当前 Token
Scope 和用户 RBAC 过滤,并使用 30 秒私有缓存。无 taxonomy.read 或
media.read 的 Credential 不应看到对应 Tool。
6. 最小化开启 Safe Write
进入「写入策略」:
- 把 Profile 从
read_only改为safe_write。 - 只勾选
gopress.content.create_draft。 - 保存后重新进入「访问凭证」。
- 新签发一个只包含
gopress:content:write的测试 Token。
已有只读 Token 不会自动获得写 Scope;这正是 Scope Step-up 尚未实现时的安全 替代方案。
创建草稿参数示例:
{
"content_type": "post",
"title": "Agent 测试草稿",
"content": "<p>仅用于测试。</p>",
"idempotency_key": "draft-smoke-20260809-0001"
}
预期结果:
- 内容状态固定为
draft。 - 作者绑定 Token 所属用户,客户端不能伪造
author_id。 - 重复发送完全相同的 Tool、参数和幂等键时,返回已保存结果而不是再建一条。
- 参数中加入未声明字段会收到
invalid_arguments。 - 调用审计出现
started与succeeded,重放时出现replayed。
7. 验证乐观锁与显式确认
开启 gopress.content.update 后,先用 content.get 读取最新 updated_at,再把
它原样作为 expected_updated_at 传给更新调用。一次成功更新后,继续使用旧
时间戳应得到 conflict,证明 Agent 不能覆盖后台或另一客户端的新编辑。
发布或移入回收站还必须同时满足:
- 对应写 Tool 已逐项启用。
- Credential 包含所需 Scope。
- 当前角色具有
content.publish或content.delete/delete_own。 - 参数包含最新
expected_updated_at、新的idempotency_key与confirm: true。
建议在测试环境完整验证后,仍只为生产 Agent 开放完成任务必需的 Tool。
8. 验证撤销
在「访问凭证」撤销测试 Token,然后再次调用任意 Tool。预期立即返回认证失败, 不需要等待 Token 原定过期时间。账号被停用或角色被降低时也应在下一次执行时 生效,因为 Executor 会重新加载当前 Principal。
