The Problem
Companies run many legacy REST, SOAP, GraphQL or SQL services that have no native AI interface. Exposing those services to LLMs normally requires custom middleware, costly engineering, and often a separate “MCP server” that sits between the LLM and the data source.
What This Does
AnythingMCP is a self‑hosted gateway that turns any exposeable service into a connector for Claude, ChatGPT or Copilot. It ships 190 ready‑made adapter definitions (e.g. DHL, Datev, Weclapp) plus a plug‑in for arbitrary OpenAPI, Postman, WSDL, GraphQL or SQL endpoints.
The gateway is a NestJS/Express backend (packages/backend/src/main.ts) that exposes a RESTful API. The front‑end is a Next.js app (packages/frontend/src/components/tool-editor/index.tsx) that lets you upload or edit an adapter JSON, configure credentials, and bind it to a workspace. Credentials are stored AES‑256‑GCM‑encrypted; audit logs keep the raw upstream response on the host.
How It Is Wired
- Entry point –
packages/backend/src/main.tscallsNestFactory.create(AppModule)and starts the HTTP server on${process.env.PORT}. - AppModule imports
ConnectorModule,AuthModule,AuditModule. - ConnectorModule loads adapters from
packages/backend/src/connectorsand registers them inConnectorService. - ConnectorService exposes
invoke(name, params)which resolves the adapter, injects credentials viaSecretsUtil(packages/backend/src/common/secrets.util.ts), and forwards the request to the target endpoint. - SecretsUtil decrypts stored secrets; its presence is flagged by the static audit as a Low/Security issue because the pattern matches potential secret leakage.
- AuditModule writes the upstream response to a local log file; the log is only written once per invocation, so the blast radius is confined to the service’s own filesystem.
- Front‑end (
tool‑editor/index.tsx) posts the adapter JSON to/api/adapterswhich hits the sameConnectorServicefor persistence. - Docker (
Dockerfile,docker-compose.quickstart.yml) builds a single image that contains the compiled TS (dist/) and starts the NestJS server. The quickstart script pulls the image, generates a.envwithJWT_SECRETandENCRYPTION_KEY, and spins up the stack withdocker compose.
How To Use It
- Setup ``
bash mkdir anythingmcp && cd anythingmcp curl -fsSLo docker-compose.yml \ https://raw.githubusercontent.com/moses-y/anythingmcp/main/docker-compose.quickstart.yml printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env docker compose up -d`The command uses the provideddocker-compose.quickstart.ymland theDockerfile` in the repo root.
- Configuration -
.envmust containJWT_SECRET,ENCRYPTION_KEY, and database URLs (e.g.POSTGRES_URL). - Adapter credentials are supplied via the front‑end; they are stored in the tableconnector_secretsencrypted bySecretsUtil.
- Running After the containers are up, the gateway is reachable at
http://localhost:3000. The LLM receives an MCP URL such ashttps://localhost:3000/mcp/fieldservice.
Real‑World Use
A field‑service company exposes a REST API that lists technicians’ visits. A user asks Claude: “Which companies did Technician X visit last week?” Claude calls the MCP URL, the gateway forwards the request to the REST endpoint, returns only the mapped fields (companyName, visitDate), and logs the raw response for compliance.
Code Health & Issues
- Low/Security – 1 path with potential secret leakage:
packages/backend/src/common/secrets.util.ts. - No other critical issues detected by the static audit.
- The repo has a full CI pipeline (
.github/workflows/ci.yml) and end‑to‑end tests (tests/). - Licensing is AGPL‑3.0, so any derivative must also be AGPL‑licensed.
The Bottom Line
AnythingMCP delivers a ready‑to‑run MCP gateway with minimal configuration. It is ideal for internal teams that need to expose legacy systems to LLMs without building custom middleware. The AGPL license and the need to run Docker locally may limit adoption in highly regulated or proprietary environments, but for open‑source or in‑house projects the value outweighs the trade‑offs.