对MCP进行编码
用于自定义自动化工具的MCP服务器 Apify代理
部分 项目编码
项目编码
在浏览器内部(或本地)运行完整的端到端浏览器自动化管道。将浏览器操作编码并回放为健壮(确定性)和可重用的脚本。 从快速原型制作和快速自动化脚本到大规模的复杂部署。
- 登录 -可重用身份验证会话-可重用安全登录(TBD)❎
- 代理 -将脚本转换为浏览器操作-代码或文本脚本(未来)✅
- 编码员 -将浏览器操作转换为脚本(待定-目前已集成)✅
- 机器人 -可扩展性自动化引擎(待定-目前已集成)✅
- 主控程序 -自动化成为可重用的工具,您可以通过AI重用✅
更多的还在路上。..给它一个 射击 🎬 或者加入列表关注该项目! 🔔
它做什么
模型上下文协议(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.使令牌具体化
可选-您也可以稍后将令牌放置在MCP服务器JSON中。
apify login这将把您的令牌保存到 ~/.apify/auth.json.
或者,设置环境变量:
export APIFY_TOKEN="your_token_here"2.创建工具
Apify编码器 可以将随意的浏览器操作转化为可重用的人工智能工具。 目前,此功能也集成在 Apify代理
导出工具并将结果作为JSON字符串附加到MCP服务器 args 或者让你的人工智能为你做这件事。
{
"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.连接到克劳德桌面(或光标/VS代码)
编辑您的Claude Desktop配置:
macOS/Linux: ~/.config/Claude/claude_desktop_config.json
窗户: %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"
}
}
}
}重启克劳德。您的工具现在可供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" }
}实现细节
- 脚本:剧作家自动化代码。接收
inputs具有用户提供的参数的对象,以及page用于浏览器自动化的对象。 - 演员ID:指定要执行的演员。默认为
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链接(本地测试)
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“工具执行失败”
检查你的剧作家脚本语法。脚本必须是有效的JavaScript,并且:
- 有权访问
inputs(用户提供的参数) - 有权访问
page(剧作家页面对象) - 返回一个值或对象
// ✓ 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:干净易读的命令行;没有混淆。
- 自足:所有依赖项都捆绑在一起;安装后即可脱机工作。
- 无状态:每次调用都是独立的;易于水平缩放。
- 来自env/CLI的令牌:无缝的身份验证体验;尊重生态系统公约。
许可证
阿帕奇-2.0
贡献
欢迎在

