关于 codify-mcp
codify-mcp 是将可复用浏览器自动化作为工具提供的 MCP 服务,面向 AI 助手用户和自动化开发者。工具以 JSON 参数传入,并通过 Apify Agent 执行。
主要功能
- 01通过 MCP 暴露自定义工具
- 02运行 Playwright 浏览器脚本
- 03执行 Apify actor
- 04用 JSON Schema 定义输入
- 05启动时传入一个或多个工具
适用场景
- 01自动提取商品页面数据
- 02将浏览器操作复用为助手工具
- 03在部署中运行多个自动化任务
MCP 相关
该 MCP 服务将传入的自动化定义注册为 MCP 客户端可用的工具。实现可使用 Playwright 脚本或 Apify actor。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Codify MCP
使用 Apify Agent 构建自定义自动化工具的 MCP 服务
Project Codify 的一部分
Project Codify
完整的端到端浏览器自动化流水线,可在浏览器内或本地运行。将浏览器操作编写为代码,并重放为可靠(确定性)且可复用的脚本。 从快速原型设计和简易自动化脚本,到大规模的复杂部署。
-
Login - 可复用的身份验证会话 - 可复用的安全登录(待定)❎
-
Agent - 将脚本转化为浏览器操作 - 代码或文本脚本(未来推出)✅
-
Coder - 将浏览器操作转化为脚本(待定 - 当前已集成)✅
-
Robot - 可扩展的自动化引擎(待定 - 当前已集成)✅
-
MCP - 将自动化转化为可通过 AI 复用的工具 ✅
更多功能即将推出……来试试看🎬,或加入列表以关注项目进展!🔔
功能介绍
Model Context Protocol(MCP)服务,可让 AI 助手(例如 Claude、Cursor、VS Code)通过 Apify Agent 执行浏览器自动化任务。工具以简洁的 JSON 参数传入,每行一个。无需手动设置或创建文件。
用法
使用 npx 直接运行:
npx codify-mcp {{JSON_MCP_TOOL_1}} {{JSON_MCP_TOOL_2}} {{JSON_MCP_TOOL_3}}...
或在本地安装:
npm install -g codify-mcp
快速开始
1. Apify 令牌
可选 - 你也可以稍后将令牌放入 MCP 服务 JSON 中。
apify login
这会将令牌保存到 ~/.apify/auth.json。
或者,设置环境变量:
export APIFY_TOKEN="your_token_here"
2. 创建工具
Apify Coder 可以将随手进行的浏览器操作转化为可复用的 AI 工具。 目前,此功能也已集成在 Apify Agent 中。
导出工具,并将结果作为 JSON 字符串追加到 MCP 服务的 args 字段中,或让 AI 帮你完成。
{
"name": "scrape_product",
"description": "Scrape product info from a page",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Product page URL"
}
},
"required": ["url"]
},
"implementation": {
"type": "apify-actor",
"actorId": "cyberfly/apify-agent",
"script": "await page.goto(inputs.url); const title = await page.textContent('h1'); return {title};"
}
}
3. 运行服务
npx codify-mcp '{"name":"scrape_product","description":"...","inputSchema":{...},"implementation":{...}}'
或使用多个工具:
npx codify-mcp \
'{"name":"tool1",...}' \
'{"name":"tool2",...}' \
'{"name":"tool3",...}'
4. 连接到 Claude Desktop(或 Cursor/VS Code)
编辑 Claude Desktop 配置:
macOS/Linux: ~/.config/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"codify-mcp": {
"command": "npx",
"args": [
"codify-mcp",
"{\"name\":\"scrape_product\",\"description\":\"...\",\"inputSchema\":{...},\"implementation\":{...}}"
],
"env": {
"APIFY_TOKEN": "your_token_or_leave_empty_to_use_auth_file"
}
}
}
}
重启 Claude。现在,AI 助手即可使用你的工具。
工具定义参考
基本结构
{
// Required
"name": "tool_name", // alphanumeric + underscore/dash
"description": "What the tool does", // shown to AI
"inputSchema": {
"type": "object",
"properties": {
"paramName": {
"type": "string",
"description": "Parameter description"
}
},
"required": ["paramName"]
},
"implementation": {
"type": "apify-actor",
"actorId": "cyberfly/apify-agent", // actor to run
"script": "await page.goto(inputs.url); ..." // Playwright code
},
// Optional
"version": "1.0.0",
"metadata": { "custom": "fields" }
}
实现细节
- script:Playwright 自动化代码。接收包含用户提供参数的
inputs对象,以及用于浏览器自动化的page对象。 - actorId:要执行的 Apify Actor。默认为
cyberfly/apify-agent。
输入模式示例
简单文本输入:
{
"url": {
"type": "string",
"description": "Website URL"
}
}
可选字段:
{
"timeout": {
"type": "integer",
"description": "Timeout in seconds",
"default": 30
}
}
枚举(下拉菜单):
{
"format": {
"type": "string",
"enum": ["json", "csv", "markdown"],
"description": "Output format"
}
}
用法模式
单个工具(开发)
npx codify-mcp '{"name":"test","description":"Test tool","inputSchema":{"type":"object","properties":{}},"implementation":{"type":"apify-actor","script":"console.log('hello')"}}'
多个工具(生产)
npx codify-mcp \
"$(cat tools/scraper.json)" \
"$(cat tools/logger.json)" \
"$(cat tools/analyzer.json)"
使用环境变量
APIFY_TOKEN="apk_..." npx codify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'
使用 npm link(本地测试)
cd /path/to/codify-mcp
npm link
# Now use anywhere
codify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'
身份验证
令牌解析顺序:
- APIFY_TOKEN 环境变量(如果已设置且不为空)
- ~/.apify/auth.json(来自
apify loginCLI 命令) - 错误:未找到令牌,工具执行将失败并显示明确的消息
故障排除
“参数中没有有效工具”
请确保传入了有效的 JSON 字符串作为参数:
# ✓ Correct
npx codify-mcp '{"name":"test","description":"Test","inputSchema":{"type":"object","properties":{}},"implementation":{"type":"apify-actor","script":"return {ok:true}"}}'
# ✗ Wrong (missing quotes around JSON)
npx codify-mcp {name:"test"...}
# ✗ Wrong (single quotes around JSON on Linux/Mac may need escaping)
npx codify-mcp '{name:"test"...}' # Use double quotes inside
“Apify 令牌无效或缺失”
请确保已设置身份验证:
# Option 1: Login via CLI
apify login
# Option 2: Set environment variable
export APIFY_TOKEN="apk_your_token_here"
apify token
“工具执行失败”
请检查 Playwright 脚本语法。脚本必须是有效的 JavaScript,并且:
- 可以访问
inputs(用户提供的参数) - 可以访问
page(Playwright 页面对象) - 返回一个值或对象
// ✓ Valid
await page.goto(inputs.url);
const title = await page.textContent('h1');
return { title };
// ✗ Invalid (missing await)
page.goto(inputs.url);
大型工具集(50 个以上工具)
如果工具很多,可考虑拆分到多个 MCP 服务中:
{
"mcpServers": {
"apify-scraper": {
"command": "npx",
"args": ["codify-mcp", "...tool1...", "...tool2..."]
},
"apify-analyzer": {
"command": "npx",
"args": ["codify-mcp", "...tool3...", "...tool4..."]
}
}
}
开发
本地运行
npm link
codify-mcp '{"name":"test",...}'
结构
lib/
index.js # Main entry: assembleWrapperCode(), start()
mcp/
resolver.js # Module path bootstrapping
auth.js # Token resolution
actor_caller.js # Apify actor execution
server_setup.js # MCP server + tool registration
bin/
start.js # Executable entry point (bin field in package.json)
核心设计原则
- 无需文件:通过 argv 传递所有工具;无需配置文件或手动设置。
- 无需 base64:命令行简洁易读;不进行混淆。
- 独立自包含:打包所有依赖;安装后可离线运行。
- 无状态:每次调用彼此独立;易于水平扩展。
- 从环境变量/CLI 获取令牌:提供流畅的身份验证体验;遵循 Apify 生态系统惯例。
许可证
Apache-2.0
贡献
欢迎通过 github.com/cybairfly/codify-mcp 提交问题和 PR。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。