io.github.sani-savaliya/agentify

Official registry Developer tools

Turn any OpenAPI/Swagger spec into an MCP server - every API operation becomes an agent tool.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package agentify-openapi
Claude Code
claude mcp add agentify -e 'AGENTIFY_BEARER_TOKEN=<your agentify_bearer_token>' -e 'AGENTIFY_API_KEY=<your agentify_api_key>' -e 'AGENTIFY_API_KEY_HEADER=<AGENTIFY_API_KEY_HEADER>' -e 'AGENTIFY_API_KEY_QUERY=<AGENTIFY_API_KEY_QUERY>' -e 'AGENTIFY_BASIC_USER=<AGENTIFY_BASIC_USER>' -e 'AGENTIFY_BASIC_PASS=<your agentify_basic_pass>' -- npx -y agentify-openapi@0.1.1 '<openapi_spec_url>'
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "agentify": {
            "command": "npx",
            "args": [
                "-y",
                "agentify-openapi@0.1.1",
                "<openapi_spec_url>"
            ],
            "env": {
                "AGENTIFY_BEARER_TOKEN": "<your agentify_bearer_token>",
                "AGENTIFY_API_KEY": "<your agentify_api_key>",
                "AGENTIFY_API_KEY_HEADER": "<AGENTIFY_API_KEY_HEADER>",
                "AGENTIFY_API_KEY_QUERY": "<AGENTIFY_API_KEY_QUERY>",
                "AGENTIFY_BASIC_USER": "<AGENTIFY_BASIC_USER>",
                "AGENTIFY_BASIC_PASS": "<your agentify_basic_pass>"
            }
        }
    }
}

Environment variables

  • AGENTIFY_BEARER_TOKEN secret Optional. Sent to the upstream API as 'Authorization: Bearer <token>'.
  • AGENTIFY_API_KEY secret Optional API key for the upstream API. Sent as a header (name auto-discovered from the spec's security schemes, default X-API-Key).
  • AGENTIFY_API_KEY_HEADER Optional. Override the header name used for AGENTIFY_API_KEY.
  • AGENTIFY_API_KEY_QUERY Optional. Send AGENTIFY_API_KEY as this query parameter instead of a header.
  • AGENTIFY_BASIC_USER Optional HTTP basic auth username (pair with AGENTIFY_BASIC_PASS).
  • AGENTIFY_BASIC_PASS secret Optional HTTP basic auth password (pair with AGENTIFY_BASIC_USER).

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. agentify
  2. Why
  3. Use it with Claude, Cursor, Windsurf — any MCP client
  4. Big API? Pick just the tools you need
  5. Auth
  6. CLI
  7. How it works
  8. Programmatic use
  9. Limitations
  10. Development
  11. License

agentify

Turn any OpenAPI / Swagger spec into an agent-ready MCP server.

Listed on the official MCP Registry (io.github.sani-savaliya/agentify) and Smithery.

Point it at a spec — a URL, a file, OpenAPI 3.x or Swagger 2.0 — and every operation becomes a tool an AI agent can call. No code generation, no per-API boilerplate, no hosting. One command.

npx agentify-openapi https://petstore3.swagger.io/api/v3/openapi.json --list
Swagger Petstore - OpenAPI 3.0 v1.0.27
Base URL: https://petstore3.swagger.io/api/v3
Tools: 19

  getPetById
    Find pet by ID.
  findPetsByStatus
    Finds Pets by status.
  ...

Why

"Today, agents have to operate software designed for humans. The interfaces of the future will be built for agents — APIs, MCPs, CLIs — with agents as first-class citizens." — YC RFS: Software for Agents

There are tens of thousands of APIs that already describe themselves with an OpenAPI document. agentify makes every one of them agent-native, instantly, without anyone hand-writing an integration.

Use it with Claude, Cursor, Windsurf — any MCP client

Add it to your client's MCP config. The same command/args shape works in Claude Desktop, Claude Code (claude mcp add), Cursor (.cursor/mcp.json), Windsurf, Cline, and anything else that speaks MCP:

{
  "mcpServers": {
    "petstore": {
      "command": "npx",
      "args": ["-y", "agentify-openapi", "https://petstore3.swagger.io/api/v3/openapi.json"]
    }
  }
}

The agent now has one tool per API operation. Calling a tool builds the HTTP request (path params, query string, headers, JSON body) and returns the live response.

Big API? Pick just the tools you need

Pointing at GitHub (1000+ operations) or Stripe (400+) would flood your agent with hundreds of tools and wreck its tool-selection accuracy. Filter down to what matters — by tag, HTTP method, or name glob — and cap the total:

# GitHub, read-only, just the repo endpoints
npx agentify-openapi https://api.github.com/openapi.json --tag repos --read-only

# Stripe customer endpoints only, hard cap at 25 tools
npx agentify-openapi ./stripe.json --include "*Customer*" --max-tools 25
{
  "mcpServers": {
    "github-repos": {
      "command": "npx",
      "args": ["-y", "agentify-openapi", "https://api.github.com/openapi.json",
               "--tag", "repos", "--read-only", "--max-tools", "30"],
      "env": { "AGENTIFY_BEARER_TOKEN": "ghp_your_token" }
    }
  }
}

--read-only (GET/HEAD/OPTIONS) is also a simple safety rail — expose a giant API to an agent without exposing anything that can mutate state.

Auth

Provide credentials via environment variables — agentify reads the spec's declared security scheme to find the right header name when it can:

VariableEffect
AGENTIFY_BEARER_TOKENAuthorization: Bearer <token>
AGENTIFY_BASIC_USER / AGENTIFY_BASIC_PASSHTTP basic auth
AGENTIFY_API_KEYAPI key (sent as a header by default)
AGENTIFY_API_KEY_HEADEROverride the api-key header name
AGENTIFY_API_KEY_QUERYSend the api key as a query param instead

You can also inject raw headers from the CLI: --header "X-Org-Id: 42" (repeatable).

CLI

agentify <spec-url-or-file> [options]

  --base-url <url>     Override the API base URL from the spec
  --header "K: V"      Add a raw header to every request (repeatable)
  --name <name>        Override the MCP server name
  --list               Print the discovered tools and exit (no server)
  -h, --help           Show help

  Tool selection (keep big APIs from flooding the agent's context):
  --tag <tag>          Keep only operations with this tag (repeatable)
  --exclude-tag <tag>  Drop operations with this tag (repeatable)
  --method <verb>      Keep only this HTTP method, e.g. GET (repeatable)
  --read-only          Shorthand: keep only GET/HEAD/OPTIONS operations
  --include <glob>     Keep only tools matching this glob (repeatable)
  --exclude <glob>     Drop tools matching this glob (repeatable)
  --max-tools <n>      Hard cap on tool count (warns when it truncates)

How it works

A small, pure pipeline — each stage is independently unit-tested:

spec ──▶ operations ──▶ tool defs ──▶ http request ──▶ response
 │           │              │              │              │
load &    one tool       JSON Schema   path/query/    fetch + surface
deref     per op         for inputs    header/body    status & body
$refs                                  + auth

Only the HTTP execution and MCP transport touch the outside world; everything else is deterministic and tested.

Programmatic use

import { loadSpec, extractOperations, resolveBaseUrl, createServer } from "agentify-openapi";

const spec = await loadSpec("./openapi.yaml");
const tools = extractOperations(spec);
const baseUrl = resolveBaseUrl(spec);
// ...build your own MCP server, or just inspect the generated tool defs

Limitations

  • JSON request/response bodies are first-class; multipart/form bodies are passed through best-effort.
  • cookie parameters and OAuth2 flows are not yet handled (use --header for now).
  • One server per spec. Multi-spec aggregation is on the roadmap.

Development

npm install
npm test          # vitest, 80%+ coverage enforced
npm run build     # tsc -> dist/
node scripts/smoke.mjs   # end-to-end MCP client smoke test (network)

License

MIT

Frequently asked questions

What is io.github.sani-savaliya/agentify?

Turn any OpenAPI/Swagger spec into an MCP server - every API operation becomes an agent tool.

How do I install io.github.sani-savaliya/agentify?

It runs on your machine. In Claude Code: claude mcp add agentify -e 'AGENTIFY_BEARER_TOKEN=<your agentify_bearer_token>' -e 'AGENTIFY_API_KEY=<your agentify_api_key>' -e 'AGENTIFY_API_KEY_HEADER=<AGENTIFY_API_KEY_HEADER>' -e 'AGENTIFY_API_KEY_QUERY=<AGENTIFY_API_KEY_QUERY>' -e 'AGENTIFY_BASIC_USER=<AGENTIFY_BASIC_USER>' -e 'AGENTIFY_BASIC_PASS=<your agentify_basic_pass>' -- npx -y agentify-openapi@0.1.1 '<openapi_spec_url>'. For other clients, paste the JSON configuration from this page into their MCP settings.

Does io.github.sani-savaliya/agentify need an API key?

Yes. It expects AGENTIFY_BEARER_TOKEN, AGENTIFY_API_KEY, AGENTIFY_BASIC_PASS, which you set in its configuration.

Is io.github.sani-savaliya/agentify open source?

Its code is public on GitHub, but the repository does not declare a standard license.

Who maintains io.github.sani-savaliya/agentify?

It is published by sani-savaliya. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.