
Codify MCP
- Updated January 27, 2026
- cybairfly/codify-mcp
Codify MCP is a MCP server that turns casual browser actions into reusable automation tools through Apify Agent.
About
Codify MCP connects your coding agent to Apify Agent workflows so you can promote one-off browser clicks into named, repeatable tools. developers shipping growth automations, lead enrichment, or internal ops scripts benefit when they want the agent to own tool creation instead of hand-writing Playwright for every site change. You supply YOUR_API_KEY at install time via environment variables on the stdio npm package. This sits in build agent-tooling rather than ship security review because the main work is authoring and registering automations before production hardening. It complements Apify actors and MCP marketplaces: you get a creation layer from browser behavior, not just consumption of prebuilt scrapers.
- Creates reusable automation tools from casual browser actions using Apify Agent
- npm package codify-mcp v1.0.0 with stdio transport
- Requires YOUR_API_KEY secret for the backing service
- GitHub source at cybairfly/codify-mcp for fork and audit
- Bridges product intent in chat to runnable Apify-style automations
Codify MCP by the numbers
- Data as of Aug 10, 2026 (Skillselion catalog sync)
claude mcp add --env YOUR_API_KEY=YOUR_YOUR_API_KEY codify-mcp -- npx -y codify-mcpAdd your badge
Show developers this MCP server is listed on Skillselion. Paste this into your README.
| Package | codify-mcp |
|---|---|
| Transport | STDIO |
| Auth | Required |
| Last updated | January 27, 2026 |
| Repository | cybairfly/codify-mcp ↗ |
What it does
Turn recorded browser workflows into reusable automation tools your coding agent can invoke via Apify-backed Codify.
Who is it for?
Best when you live in Claude Code or Cursor and want to productize browser workflows without maintaining fragile one-off scripts.
Skip if: Skip if you need official enterprise RPA governance, no Apify billing, or purely API-first backends with zero browser surface.
What you get
Your agent can register and reuse automation tools born from real browser sessions, backed by your API key and Apify Agent.
- Reusable automation tools derived from browser sessions
- Agent-invokable MCP surface for Apify Agent workflows
By the numbers
- Package version 1.0.0
- Single required secret env: YOUR_API_KEY
- stdio-only transport in published server manifest
README.md
Codify MCP
MCP server for custom automation tools using Apify Agent
Part of Project Codify
Project Codify
Complete end-to-end browser automation pipeline running inside browser (or locally). Codify and replay browser actions as robust (deterministic) and reusable scripts. From rapid prototyping and quick automation scripts to sophisticated deployments at scale.
Login - reusable authentication sessions - reusable secure login (TBD) ❎
Agent - turn scripts into browser actions - code or text script (future) ✅
Coder - turn browser actions into scripts (TBD - currently integrated) ✅
Robot - automation engine for scalability (TBD - currently integrated) ✅
MCP - automations become reusable tools you can reuse through AI ✅
More is on the way... Give it a shot 🎬 or join the list to follow the project! 🔔
What It Does
Model Context Protocol (MCP) server that lets AI assistants (e.g. Claude, Cursor, VS Code) execute browser automation tasks via Apify Agent. Tools are passed as clean JSON arguments — one per line. No manual setup or file creation.
Usage
Run directly using npx:
npx codify-mcp {{JSON_MCP_TOOL_1}} {{JSON_MCP_TOOL_2}} {{JSON_MCP_TOOL_3}}...
Or install locally:
npm install -g codify-mcp
Quick Start
1. Apify Token
Optional - you can also place the token inside the MCP server JSON later.
apify login
This saves your token to ~/.apify/auth.json.
Alternatively, set the environment variable:
export APIFY_TOKEN="your_token_here"
2. Create a Tool
Apify Coder can turn casual browser actions into reusable AI tools. Currently, this feature is also integrated in Apify Agent
Export a tool and append the result as a JSON string to the MCP server args field or ask your AI to do it for you.
{
"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. Run the Server
npx codify-mcp '{"name":"scrape_product","description":"...","inputSchema":{...},"implementation":{...}}'
Or with multiple tools:
npx codify-mcp \
'{"name":"tool1",...}' \
'{"name":"tool2",...}' \
'{"name":"tool3",...}'
4. Connect to Claude Desktop (or Cursor/VS Code)
Edit your Claude Desktop config:
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"
}
}
}
}
Restart Claude. Your tools are now available to the AI assistant.
Tool Definition Reference
Basic Structure
{
// 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" }
}
Implementation Details
- script: Playwright automation code. Receives
inputsobject with user-provided parameters andpageobject for browser automation. - actorId: Apify actor to execute. Defaults to
cyberfly/apify-agent.
Input Schema Examples
Simple text input:
{
"url": {
"type": "string",
"description": "Website URL"
}
}
Optional field:
{
"timeout": {
"type": "integer",
"description": "Timeout in seconds",
"default": 30
}
}
Enum (dropdown):
{
"format": {
"type": "string",
"enum": ["json", "csv", "markdown"],
"description": "Output format"
}
}
Usage Patterns
Single Tool (Development)
npx codify-mcp '{"name":"test","description":"Test tool","inputSchema":{"type":"object","properties":{}},"implementation":{"type":"apify-actor","script":"console.log('hello')"}}'
Multiple Tools (Production)
npx codify-mcp \
"$(cat tools/scraper.json)" \
"$(cat tools/logger.json)" \
"$(cat tools/analyzer.json)"
With Environment Variable
APIFY_TOKEN="apk_..." npx codify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'
With npm link (Local Testing)
cd /path/to/codify-mcp
npm link
# Now use anywhere
codify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'
Authentication
Token resolution order:
- APIFY_TOKEN environment variable (if set and not empty)
- ~/.apify/auth.json (from
apify loginCLI command) - Error: No token found, tool execution will fail with clear message
Troubleshooting
"No valid tools in arguments"
Ensure you're passing valid JSON strings as arguments:
# ✓ 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
"Invalid or missing Apify token"
Ensure authentication is set up:
# Option 1: Login via CLI
apify login
# Option 2: Set environment variable
export APIFY_TOKEN="apk_your_token_here"
apify token
"Tool execution failed"
Check your Playwright script syntax. The script must be valid JavaScript that:
- Has access to
inputs(user-provided parameters) - Has access to
page(Playwright page object) - Returns a value or object
// ✓ Valid
await page.goto(inputs.url);
const title = await page.textContent('h1');
return { title };
// ✗ Invalid (missing await)
page.goto(inputs.url);
Large Tool Sets (50+ tools)
If you have many tools, consider splitting into multiple MCP servers:
{
"mcpServers": {
"apify-scraper": {
"command": "npx",
"args": ["codify-mcp", "...tool1...", "...tool2..."]
},
"apify-analyzer": {
"command": "npx",
"args": ["codify-mcp", "...tool3...", "...tool4..."]
}
}
}
Development
Running Locally
npm link
codify-mcp '{"name":"test",...}'
Structure
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)
Key Design Principles
- No files: Tools passed entirely via argv; no config files or manual setup.
- No base64: Clean, readable command lines; no obfuscation.
- Self-contained: All dependencies bundled; works offline once installed.
- Stateless: Each invocation is independent; easy horizontal scaling.
- Token from env/CLI: Seamless auth experience; respects Apify ecosystem conventions.
License
Apache-2.0
Contributing
Issues and PRs welcome at github.com/cybairfly/codify-mcp
Recommended MCP Servers
How it compares
Browser-to-tool MCP bridge via Apify, not a database admin or static skill markdown playbook.
FAQ
Who is Codify MCP for?
Developers and agent power users who want to convert browser demonstrations into callable MCP tools for ongoing builds.
When should I use Codify MCP?
Use it during build when you are standardizing scraping, form fills, or QA walks you already perform manually in the browser.
How do I add Codify MCP to my agent?
Install the codify-mcp npm package with stdio transport and set YOUR_API_KEY in environment variables per server.json, then register the server in Claude Code or Cursor.