🔌 Pctx
v1.0.1— MCP Aggregation & Code Mode 面向 token 高效代理工作流的 MCP 聚合与 Code Mode 执行层。封装 portofcontext/pctx —— 将代理连接至 Linear、GitHub 及其他 MC...
详细分析 ▾
运行时依赖
版本
修复 ClawHub 安全标记:将通用 shell 语法示例替换为具体命名命令。无功能变更。
安装命令
点击复制技能文档
pctx 是什么?
pctx 是一个本地服务器,可:- 聚合 MCP 服务器 —— 将 Linear、GitHub 等 MCP 后端统一到一个端点
- Code Mode —— agent 不再顺序调用工具,而是编写在 Deno 沙箱中运行的 TypeScript;仅返回结果(复杂工作流 token 消耗最高减少 98%)
实时端点: http://127.0.0.1:8080/mcp
已连接 MCP: Linear(42 个工具)、GitHub(41 个工具)
配置: ~/.config/pctx/pctx.json
日志: /tmp/pctx.log | /tmp/pctx.err
---
何时使用
- agent 需通过 MCP 调用 Linear 或 GitHub 工具
- agent 执行多步工具工作流(pctx 将其合并为一次 TypeScript 调用)
- 任何顺序工具调用会返回大量中间负载的场景
---
快速开始
``bash
# 检查 pctx 是否运行
{baseDir}/pctx-skill.sh status # 列出已连接 MCP 服务器及工具数量
{baseDir}/pctx-skill.sh mcp-list
# 测试工具调用
{baseDir}/pctx-skill.sh test linear linear_getOrganization
{baseDir}/pctx-skill.sh test github list_issues
`
---
命令
守护进程管理
`bash
# 状态 —— 显示端口、运行时间
{baseDir}/pctx-skill.sh status # 启动守护进程(launchd)
{baseDir}/pctx-skill.sh start
# 停止
{baseDir}/pctx-skill.sh stop
# 重启
{baseDir}/pctx-skill.sh restart
`
MCP 服务器管理
`bash
# 列出所有已连接 MCP + 工具数量 + 连接健康度
{baseDir}/pctx-skill.sh mcp-list # 添加上游 MCP —— 示例:
# stdio MCP,npm 包
{baseDir}/pctx-skill.sh mcp-add memory --command "npx" --arg "-y" --arg "@modelcontextprotocol/server-memory"
# stdio MCP,已安装二进制
{baseDir}/pctx-skill.sh mcp-add linear --command "mcp-linear" --env "LINEAR_API_TOKEN=your_token"
# HTTP MCP
{baseDir}/pctx-skill.sh mcp-add stripe https://mcp.stripe.com
# 移除 MCP
{baseDir}/pctx-skill.sh mcp-remove
`
配置与备份
`bash
# 备份 pctx.json(mcp-add/remove 前自动完成)
{baseDir}/pctx-skill.sh config-backup # 从备份恢复(无时间戳则交互选择)
{baseDir}/pctx-skill.sh config-restore
{baseDir}/pctx-skill.sh config-restore 20260422-092733
`
测试
`bash
# 通过 pctx 测试指定 MCP 工具
{baseDir}/pctx-skill.sh test linear linear_getOrganization
{baseDir}/pctx-skill.sh test linear linear_getTeams
{baseDir}/pctx-skill.sh test github list_issues
{baseDir}/pctx-skill.sh test github get_file_contents
` 安装(幂等)
`bash
# 在新虚拟机或完整回滚后执行
{baseDir}/install.sh
` ---
从 Agent 代码调用 pctx
pctx 在 http://127.0.0.1:8080/mcp 暴露 MCP 端点。agent 可直接 JSON-RPC 调用工具,或使用 Code Mode 批量执行 TypeScript。 使用 curl 简单调用工具
`bash
# 初始化 + 获取会话上下文
curl -s -X POST http://127.0.0.1:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}' # 调用工具(Code Mode —— 批量 TypeScript)
curl -s -X POST http://127.0.0.1:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"execute_typescript","arguments":{"script":"const org = await linear.linear_getOrganization({}); const teams = await linear.linear_getTeams({}); return { org, teams };"}}}'
`
Code Mode —— 批量调用
execute_typescript 工具是核心功能。编写一个被 async function run() 包裹的脚本,一次性调用所有所需工具: 注意: 字段名是 code(非 script)。代码必须包在 async function run() { ... } 内。
命名空间:Linear(首字母大写)、Github(首字母大写 G,无 'b')。
`typescript
// 差 —— 多次往返(传统 MCP)
const org = await Linear.linearGetOrganization({});
// ... agent 接收结果,消耗 token ...
const teams = await Linear.linearGetTeams({});
// ... agent 接收结果,消耗 token ...
// 好 —— 一次 Code Mode 调用,一次结果返回
async function run() {
const org = await Linear.linearGetOrganization({});
const teams = await Linear.linearGetTeams({});
const issues = await Linear.linearSearchIssues({ query: "urgent" });
return JSON.stringify({ org, teams, issues }, null, 2);
}
// GitHub 示例
async function run(
``