{"_id":"@asgerami/wrangl","_rev":"3-936ce22cb1d4b896c776eeb505392496","name":"@asgerami/wrangl","dist-tags":{"latest":"0.4.0"},"versions":{"0.2.0":{"name":"@asgerami/wrangl","version":"0.2.0","keywords":["mcp","model-context-protocol","openapi","ai-agents","rest-api"],"author":{"name":"asgerami"},"license":"MIT","_id":"@asgerami/wrangl@0.2.0","maintainers":[{"name":"asgerami","email":"amiraman467@gmail.com"}],"homepage":"https://github.com/asgerami/wrangl#readme","bugs":{"url":"https://github.com/asgerami/wrangl/issues"},"bin":{"wrangl":"dist/cli.js"},"dist":{"shasum":"df1124eeb9a9c89b0d84bcd51e7c571122e68466","tarball":"https://registry.npmjs.org/@asgerami/wrangl/-/wrangl-0.2.0.tgz","fileCount":90,"integrity":"sha512-yKlNB/J1cieogAMA9VgPgB1pXQPfqKo5Rqyf9nkAETNzbeuwk4O2KXJtPjspha1LBrCalyExfLKigCID8srTcw==","signatures":[{"sig":"MEUCIGgDGHjjGVj0AS9dnA5NQ3r0frDfZUbkdDGh5XKhe/ZzAiEAgbCjjfnbYXa32c8k4O/v5W8gl0re2gonE21k4PRSADw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391848},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"1f0677e75b31b9f24ec25bcf861111fa99c1f121","scripts":{"dev":"tsx src/cli.ts","test":"node --test --import tsx ./test/*.test.ts","build":"tsc && cp src/controlplane/dashboard.html dist/controlplane/dashboard.html","start":"node dist/cli.js","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"asgerami","email":"amiraman467@gmail.com"},"repository":{"url":"git+https://github.com/asgerami/wrangl.git","type":"git"},"_npmVersion":"12.0.1","description":"Turn any REST API into an agent-ready MCP server in minutes.","directories":{},"_nodeVersion":"26.4.0","dependencies":{"pg":"^8.22.0","zod":"^4.4.3","fastify":"^5.8.5","commander":"^15.0.0","@anthropic-ai/sdk":"^0.105.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","@types/pg":"^8.20.0","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wrangl_0.2.0_1784407362131_0.9991492936314605","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@asgerami/wrangl","version":"0.3.0","keywords":["mcp","model-context-protocol","openapi","ai-agents","rest-api"],"author":{"name":"asgerami"},"license":"MIT","_id":"@asgerami/wrangl@0.3.0","maintainers":[{"name":"asgerami","email":"amiraman467@gmail.com"}],"homepage":"https://github.com/asgerami/wrangl#readme","bugs":{"url":"https://github.com/asgerami/wrangl/issues"},"bin":{"wrangl":"dist/cli.js"},"dist":{"shasum":"2b1474369662ab81057d89a283d23e463e212475","tarball":"https://registry.npmjs.org/@asgerami/wrangl/-/wrangl-0.3.0.tgz","fileCount":90,"integrity":"sha512-UttU0X6Vq/bcEbDc0rxmbHmtpAEoaXqyaP/q8Zn3Hd6XIqAoDK/rnCaJ/JNFBjuPfMfrlcmudHIPYfgKTAxxag==","signatures":[{"sig":"MEUCIQDkCvODdOgM4XGYREXgU6Ha+YXSG2zyU1dPrhWBcP2F1QIgbmDqwt+iIrTVR/lL4GmTNFAdBGrVx8H8HpDI6DVbzgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asgerami%2fwrangl@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404093},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"gitHead":"4d3d3df53dafab5f1a03dbf5f9c7ff96b8abdd79","scripts":{"dev":"tsx src/cli.ts","test":"node --test --import tsx ./test/*.test.ts","build":"tsc && cp src/controlplane/dashboard.html dist/controlplane/dashboard.html && node scripts/ensure-bin.mjs","start":"node dist/cli.js","prepack":"npm run build","prepare":"node scripts/ensure-bin.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"asgerami","email":"amiraman467@gmail.com"},"repository":{"url":"git+https://github.com/asgerami/wrangl.git","type":"git"},"_npmVersion":"10.9.8","description":"Turn any REST API into an agent-ready MCP server in minutes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.22.0","zod":"^4.4.3","fastify":"^5.8.5","commander":"^15.0.0","@anthropic-ai/sdk":"^0.105.0","@modelcontextprotocol/sdk":"^1.29.0","@apidevtools/swagger-parser":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","@types/pg":"^8.20.0","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wrangl_0.3.0_1784569788202_0.6432084421875937","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@asgerami/wrangl","version":"0.4.0","description":"Turn any REST API into an agent-ready MCP server in minutes.","type":"module","publishConfig":{"access":"public"},"bin":{"wrangl":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/asgerami/wrangl.git"},"homepage":"https://github.com/asgerami/wrangl#readme","bugs":{"url":"https://github.com/asgerami/wrangl/issues"},"author":{"name":"asgerami"},"scripts":{"build":"tsc && cp src/controlplane/dashboard.html dist/controlplane/dashboard.html && node scripts/ensure-bin.mjs","dev":"tsx src/cli.ts","start":"node dist/cli.js","test":"node --test --import tsx ./test/*.test.ts","typecheck":"tsc --noEmit","prepack":"npm run build","prepare":"node scripts/ensure-bin.mjs"},"engines":{"node":">=22"},"keywords":["mcp","model-context-protocol","openapi","ai-agents","rest-api"],"license":"MIT","dependencies":{"@anthropic-ai/sdk":"^0.105.0","@apidevtools/swagger-parser":"^12.1.0","@modelcontextprotocol/node":"^2.0.0","@modelcontextprotocol/server":"^2.0.0","commander":"^15.0.0","fastify":"^5.8.5","pg":"^8.22.0","zod":"^4.4.3"},"devDependencies":{"@modelcontextprotocol/sdk":"^1.29.0","@types/node":"^26.0.0","@types/pg":"^8.20.0","tsx":"^4.22.4","typescript":"^6.0.3"},"_id":"@asgerami/wrangl@0.4.0","gitHead":"a1aac759148dda2d04e4cd3e4503010443977d64","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-B2NWFlV6Xz2l0C9JNwvujiPNzInD22cR8iRHqFctgwV56wkatt3XCqABmwIFgWmfWdpq/s4ZB3gZURJx9x/02A==","shasum":"ecfe966ca3430eec3399666bfd7aa8865b028a92","tarball":"https://registry.npmjs.org/@asgerami/wrangl/-/wrangl-0.4.0.tgz","fileCount":93,"unpackedSize":431916,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asgerami%2fwrangl@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICrYp+uiHVZnh6i08rR70lnrzQaehNn/Thm2/UdU6EqXAiEAwTCWHIICdLrJdg3s3NsdBs4gGmPhcKb5Z1ICGtAikWg="}]},"_npmUser":{"name":"asgerami","email":"amiraman467@gmail.com"},"directories":{},"maintainers":[{"name":"asgerami","email":"amiraman467@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wrangl_0.4.0_1785831184883_0.19725690374601568"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T20:42:41.985Z","modified":"2026-08-04T08:13:05.393Z","0.2.0":"2026-07-18T20:42:42.265Z","0.3.0":"2026-07-20T17:49:48.357Z","0.4.0":"2026-08-04T08:13:05.025Z"},"bugs":{"url":"https://github.com/asgerami/wrangl/issues"},"author":{"name":"asgerami"},"license":"MIT","homepage":"https://github.com/asgerami/wrangl#readme","keywords":["mcp","model-context-protocol","openapi","ai-agents","rest-api"],"repository":{"type":"git","url":"git+https://github.com/asgerami/wrangl.git"},"description":"Turn any REST API into an agent-ready MCP server in minutes.","maintainers":[{"name":"asgerami","email":"amiraman467@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"docs/hero.svg\" alt=\"Wrangl: turn any REST API into an agent-ready MCP server in one command\" width=\"820\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/asgerami/wrangl/actions/workflows/ci.yml\"><img src=\"https://github.com/asgerami/wrangl/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /></a>\n  <img src=\"https://img.shields.io/badge/tests-passing-brightgreen\" alt=\"tests\" />\n  <img src=\"https://img.shields.io/badge/node-%E2%89%A522-blue\" alt=\"node >= 22\" />\n  <img src=\"https://img.shields.io/badge/license-MIT-black\" alt=\"MIT\" />\n</p>\n\n<p align=\"center\"><b>Your AI agent can't use your APIs. Wrangl fixes that in one command.</b></p>\n\nAI agents like Claude and Cursor speak [MCP](https://modelcontextprotocol.io),\nbut almost every SaaS tool only speaks REST. Wrangl bridges the two. Point it at\nany API and it generates a fully working MCP server: every endpoint becomes a\ntool the agent can call, with your credentials injected server-side so they are\nnever exposed to the agent.\n\nNo OpenAPI knowledge, no config files, no boilerplate.\n\n<p align=\"center\">\n  <img src=\"docs/dashboard.png\" alt=\"Wrangl dashboard running a generated tool against a live API and showing the JSON response\" width=\"900\" />\n</p>\n\n## Quick start\n\nRequires **Node 22+**.\n\n```bash\n# Point at an API. Wrangl finds the spec, generates the tools, and wires it\n# into Claude Desktop. Restart Claude and it can use the API.\nnpx @asgerami/wrangl install https://petstore3.swagger.io\n\n# No spec handy? Pick a ready-made one from the catalog.\nnpx @asgerami/wrangl add github --include \"repos*\"   # filter a huge API\nnpx @asgerami/wrangl add stripe                      # 587 tools\nnpx @asgerami/wrangl catalog                         # see them all\n\n# Prefer a UI? A dashboard to create, test, and monitor servers.\nnpx @asgerami/wrangl serve             # http://localhost:4000\n```\n\nTarget another agent with `--client cursor|windsurf|cline|zed|vscode`.\n\nFrom source:\n\n```bash\ngit clone https://github.com/asgerami/wrangl.git && cd wrangl\nnpm install && npm run build\nnpm run start -- install https://petstore3.swagger.io\n# or:  npx @asgerami/wrangl install …   (works after build)\n```\n\n> Tip: if `npx @asgerami/wrangl` says `wrangl: command not found` while you are\n> inside this git checkout, run `npm run build` once (or `cd` out of the repo —\n> `npx` works fine from any other directory).\n\n## Why Wrangl\n\n- **One command to a working tool.** `npx @asgerami/wrangl install <api>`\n  discovers the spec, generates the tools, and writes the server into your agent\n  client. Done.\n- **A catalog of ready-made servers.** `wrangl add github|stripe|openai|twilio|discord|slack|sendgrid|pagerduty`\n  so you don't need a spec at all.\n- **Auto-discovery.** Point at a bare base URL and Wrangl probes well-known paths\n  and even reads the docs page to find the OpenAPI spec.\n- **Works with real APIs.** OpenAPI 3.x and Postman collections, tricky\n  `style`/`explode` params, relative server URLs, and huge specs — use\n  `--include` / `--exclude` to keep agent tool lists focused.\n- **Auth handled.** Bearer, Basic, API key, OAuth2 (authorization-code + PKCE,\n  client_credentials), and OpenID Connect discovery. Credentials stay\n  server-side.\n- **A real dashboard.** Create servers, run any tool interactively, browse\n  request/response logs, and view per-tool analytics.\n- **Production-ready.** Docker image, per-server tokens and rate limits, admin\n  auth, automatic retry with backoff on transient upstream failures, and a\n  Postgres backend for running multiple replicas.\n- **Current on the protocol.** Targets MCP `2026-07-28` (the stateless,\n  per-request revision) while still serving every earlier client from the\n  same tools. Destructive tools (`DELETE` by default) require agent\n  confirmation before they run, via MCP's multi-round-trip request pattern.\n\n## How it works\n\n```\nAny REST API ->  Ingest  ->  Generate  ->  MCP Runtime  ->  Your agent\n (spec / URL /   (parse +    (endpoints    (proxy calls     (Claude,\n  Postman /       normalize)  to tools)     + auth inject)   Cursor...)\n  auto-discover)\n```\n\nIngest a spec (or discover it), map every operation to an MCP tool, then run a\nserver that proxies real calls to the upstream API with auth injected. That is\nit, and it scales from a single stdio server up to a hosted multi-tenant control\nplane.\n\n## Documentation\n\nThe full reference lives in **[docs/GUIDE.md](docs/GUIDE.md)**:\n\n- Every CLI command and flag\n- Semantic enrichment, auto-discovery, live spec sync, usage logs\n- The hosted control plane, dashboard, and REST API\n- Authentication and the OAuth2 flow\n- Securing and deploying (Docker, TLS, Postgres for multiple replicas)\n- Library usage and project layout\n\n## Development\n\n```bash\nnpm run typecheck    # tsc --noEmit\nnpm test             # unit, live-network, and end-to-end MCP tests\nnpm run build        # emit dist/\n\nWRANGL_SKIP_NETWORK=1 npm test   # skip tests that hit the public internet\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}