Codify Mcp

io.github.cybairflyPublished by GitHub account cybairflyv1.0.0Updated Oct 24, 2026

Easily create reusable automation tools from casual browser actions using Apify Agent

VerifiedSTDIODesktop onlyBrowser AutomationDeveloper Tools

Overview

AI-generated overview

Lets an assistant run custom browser automation tools defined as JSON, executed through Apify Agent with Playwright scripts.

What you can do
Codify MCP is a local stdio server that registers browser automation tools supplied as JSON arguments on the command line. Each tool definition includes a name, description, input schema, and an implementation that runs a Playwright script through an Apify actor, defaulting to cyberfly/apify-agent. The assistant can then call these tools to navigate pages, extract content, and return structured results.
When to use it
Use it when you want to turn repeatable browser actions into reusable tools an AI assistant can call, such as scraping a product page or extracting data from a site. It suits users already in the Apify ecosystem who want custom automation without writing a full MCP server.
Requirements
Runs locally via npx or a global npm install, so Node.js is needed. An Apify token is required, supplied through the APIFY_TOKEN environment variable or the ~/.apify/auth.json file created by the apify login CLI. Network access is needed to reach Apify and the target sites.
Before you install
The APIFY_TOKEN credential is required and grants access to your Apify account, where actor runs may consume paid credits. Tool scripts are arbitrary Playwright JavaScript executed through Apify, so only run definitions you trust. Browser automation can log in to or modify sites, and page data is sent to Apify's service.

Installation

In SourceWeft

  1. Open Codify Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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:

bash
npx codify-mcp {{JSON_MCP_TOOL_1}} {{JSON_MCP_TOOL_2}} {{JSON_MCP_TOOL_3}}...

Or install locally:

bash
npm install -g codify-mcp

Quick Start

1. Apify Token

Optional - you can also place the token inside the MCP server JSON later.

bash
apify login

This saves your token to ~/.apify/auth.json.

Alternatively, set the environment variable:

bash
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.

json
{  "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

bash
npx codify-mcp '{"name":"scrape_product","description":"...","inputSchema":{...},"implementation":{...}}'

Or with multiple tools:

bash
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

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

javascript
{  // 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 inputs object with user-provided parameters and page object for browser automation.
  • actorId: Apify actor to execute. Defaults to cyberfly/apify-agent.

Input Schema Examples

Simple text input:

json
{  "url": {    "type": "string",    "description": "Website URL"  }}

Optional field:

json
{  "timeout": {    "type": "integer",    "description": "Timeout in seconds",    "default": 30  }}

Enum (dropdown):

json
{  "format": {    "type": "string",    "enum": ["json", "csv", "markdown"],    "description": "Output format"  }}

Usage Patterns

Single Tool (Development)

bash
npx codify-mcp '{"name":"test","description":"Test tool","inputSchema":{"type":"object","properties":{}},"implementation":{"type":"apify-actor","script":"console.log('hello')"}}'

Multiple Tools (Production)

bash
npx codify-mcp \  "$(cat tools/scraper.json)" \  "$(cat tools/logger.json)" \  "$(cat tools/analyzer.json)"

With Environment Variable

bash
APIFY_TOKEN="apk_..." npx codify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'

With npm link (Local Testing)

bash
cd /path/to/codify-mcpnpm link
# Now use anywherecodify-mcp '{"name":"...","description":"...","inputSchema":{},"implementation":{"type":"apify-actor","script":"..."}}'

Authentication

Token resolution order:

  1. APIFY_TOKEN environment variable (if set and not empty)
  2. ~/.apify/auth.json (from apify login CLI command)
  3. 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:

bash
# ✓ Correctnpx 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:

bash
# Option 1: Login via CLIapify login
# Option 2: Set environment variableexport 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
javascript
// ✓ Validawait 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:

json
{  "mcpServers": {    "apify-scraper": {      "command": "npx",      "args": ["codify-mcp", "...tool1...", "...tool2..."]    },    "apify-analyzer": {      "command": "npx",      "args": ["codify-mcp", "...tool3...", "...tool4..."]    }  }}

Development

Running Locally

bash
npm linkcodify-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

Source: README.md at commit 1035031

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts