Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ contact_links:
about: For anything that isn't a clear bug or feature request — please use Discussions so the answer helps everyone else too.
- name: 📚 Documentation & Guides
url: https://anythingmcp.com
about: Setup guides for all 189 adapters and every AI client, in seven languages.
about: Setup guides for all 190 adapters and every AI client, in seven languages.
- name: 🔐 Security vulnerabilities
url: https://github.com/HelpCode-ai/anythingmcp/blob/main/SECURITY.md
about: Please do NOT open a public issue. Follow the security disclosure policy.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
readme-filepath: ./README.md
# Docker Hub caps this at 100 characters and shows it in search
# results; the repo's was left at the truncated default.
short-description: "189 connectors + any REST/SOAP/GraphQL/SQL as MCP tools for Claude & ChatGPT. Self-hosted, AGPL."
short-description: "190 connectors + any REST/SOAP/GraphQL/SQL as MCP tools for Claude & ChatGPT. Self-hosted, AGPL."

- name: Set Docker Hub categories
env:
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ abstract: >
server that exposes REST, SOAP/WSDL and GraphQL APIs, SQL/NoSQL databases
and other MCP servers as tools for AI clients such as Claude, ChatGPT,
Google Gemini, GitHub Copilot and Cursor, without writing code. It ships
189 pre-built adapters (Deutsche Bahn, DATEV, weclapp, DHL, Shopware,
190 pre-built adapters (Deutsche Bahn, DATEV, weclapp, DHL, Shopware,
Personio, Handelsregister, etc.), a per-workspace knowledge graph served
over MCP, per-tool response mapping, OAuth2/RBAC/SSO/SCIM governance, an
audit log and a visual tool editor.
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<p align="center">
<img src="docs/assets/banner.png" alt="AnythingMCP — 189 connectors, 20 of them with no API key. Your REST, SOAP/WSDL, GraphQL, SQL and MCP systems become tools for Claude, ChatGPT, Copilot and Gemini." width="100%" />
<img src="docs/assets/banner.png" alt="AnythingMCP — 190 connectors, 20 of them with no API key. Your REST, SOAP/WSDL, GraphQL, SQL and MCP systems become tools for Claude, ChatGPT, Copilot and Gemini." width="100%" />
</p>

<h1 align="center">AnythingMCP</h1>

<p align="center">
<strong>Give Claude, ChatGPT and Copilot safe access to the software your company already runs.</strong><br/>
189 ready adapters, any REST/SOAP/GraphQL/SQL system without code, on your own infrastructure — and it learns how your systems connect.
190 ready adapters, any REST/SOAP/GraphQL/SQL system without code, on your own infrastructure — and it learns how your systems connect.
</p>

<p align="center">
Expand Down Expand Up @@ -36,7 +36,7 @@ docker compose up -d # → http://localhost:3000

Three words appear throughout and mean three different things:

- an **adapter** is one of the 189 JSON definitions that ship in this repo — DATEV, weclapp, DHL, Deutsche Bahn, Shopware, Personio, Handelsregister and the rest. 20 of them need no API key at all; the others ask for your credentials at import.
- an **adapter** is one of the 190 JSON definitions that ship in this repo — DATEV, weclapp, DHL, Deutsche Bahn, Shopware, Personio, Handelsregister and the rest. 20 of them need no API key at all; the others ask for your credentials at import.
- a **connector** is an adapter, or your own OpenAPI spec / Postman collection / WSDL / GraphQL endpoint / database, once you have configured it in your workspace. Anything you can point at, in minutes, without writing an MCP server.
- an **MCP server** is the URL you hand to Claude. It exposes the connectors you assign to it, and nothing else.

Expand Down Expand Up @@ -260,7 +260,7 @@ AI clients speak MCP, but your systems speak REST, SOAP, GraphQL and SQL. Writin

## The adapter catalog

189 adapters, exposing 1,800+ tools. **20 need no API key**; the rest ask for your credentials at import and the tools are available immediately. Every one has a setup guide on [anythingmcp.com/guides](https://anythingmcp.com/guides), in seven languages.
190 adapters, exposing 1,800+ tools. **20 need no API key**; the rest ask for your credentials at import and the tools are available immediately. Every one has a setup guide on [anythingmcp.com/guides](https://anythingmcp.com/guides), in seven languages.

| Category | Examples |
|---|---|
Expand Down
2 changes: 1 addition & 1 deletion glama.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"maintainers": [
"keysersoft"
],
"description": "Give Claude, ChatGPT and Copilot safe access to the software your company already runs. 189 pre-built adapters (Deutsche Bahn, DATEV, weclapp, DHL, Shopware, Personio\u2026) plus any REST, SOAP/WSDL, GraphQL or SQL system as MCP tools, no code. Self-hosted, knowledge graph, per-tool response mapping, OAuth2/RBAC/SSO/audit. Open source under AGPL-3.0."
"description": "Give Claude, ChatGPT and Copilot safe access to the software your company already runs. 190 pre-built adapters (Deutsche Bahn, DATEV, weclapp, DHL, Shopware, Personio\u2026) plus any REST, SOAP/WSDL, GraphQL or SQL system as MCP tools, no code. Self-hosted, knowledge graph, per-tool response mapping, OAuth2/RBAC/SSO/audit. Open source under AGPL-3.0."
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "anythingmcp",
"version": "0.9.0",
"description": "Give Claude, ChatGPT and Copilot safe access to the software your company already runs. 189 pre-built adapters plus any REST, SOAP/WSDL, GraphQL or SQL system as MCP tools, no code. Self-hosted, open source (AGPL-3.0).",
"description": "Give Claude, ChatGPT and Copilot safe access to the software your company already runs. 190 pre-built adapters plus any REST, SOAP/WSDL, GraphQL or SQL system as MCP tools, no code. Self-hosted, open source (AGPL-3.0).",
"private": true,
"license": "AGPL-3.0-only",
"engines": {
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/adapters/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import * as activecampaign from './intl/activecampaign.json';
import * as acuityScheduling from './intl/acuity-scheduling.json';
import * as adyen from './intl/adyen.json';
import * as agilecrm from './intl/agilecrm.json';
import * as airtable from './intl/airtable.json';
import * as amadeus from './intl/amadeus.json';
import * as amazonSeller from './intl/amazon-seller.json';
import * as apiFootball from './intl/api-football.json';
Expand Down Expand Up @@ -346,6 +347,7 @@ const RAW_ADAPTERS: AdapterDefinition[] = [
acuityScheduling as unknown as AdapterDefinition,
adyen as unknown as AdapterDefinition,
agilecrm as unknown as AdapterDefinition,
airtable as unknown as AdapterDefinition,
amadeus as unknown as AdapterDefinition,
amazonSeller as unknown as AdapterDefinition,
apiFootball as unknown as AdapterDefinition,
Expand Down
125 changes: 125 additions & 0 deletions packages/backend/src/adapters/intl/airtable.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
{
"slug": "airtable",
"name": "Airtable",
"description": "Read Airtable bases, table schemas, and records from any AI agent. 4 read-only tools, Personal Access Token auth.",
"instructions": "This connector uses the Airtable Web API v0 and is read-only.\n\n**Setup**:\n1. Create a Personal Access Token at https://airtable.com/create/tokens.\n2. Grant only the `data.records:read` and `schema.bases:read` scopes.\n3. Restrict the token's access to only the bases this connector must read.\n4. Set `AIRTABLE_PERSONAL_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${AIRTABLE_PERSONAL_ACCESS_TOKEN}`. Use a scoped Personal Access Token, not a legacy API key.\n\n**Discovery order**: call `airtable_list_bases`, then `airtable_list_tables` with a base ID to find table IDs, names, fields, and views. Use a table ID when possible because names can change.\n\n**Records**: `airtable_list_records` returns one page and may include an `offset`. Pass that `offset` to the next call until it is absent. `pageSize` is 1-100; `maxRecords` limits the total records Airtable returns.\n\n**Filtering**: `filterByFormula` uses Airtable formula syntax. For example, `{Status}=\"Active\"` returns records whose Status field is Active. A view can apply saved filters and sorting; combine it with a formula only when both restrictions are intended.\n\n**Out of scope here**: creating, updating, deleting, or otherwise modifying bases, tables, fields, views, or records.",
"region": "intl",
"category": "productivity",
"icon": "airtable",
"docsUrl": "https://airtable.com/developers/web/api/introduction",
"requiredEnvVars": ["AIRTABLE_PERSONAL_ACCESS_TOKEN"],
"connector": {
"name": "Airtable Web API v0",
"type": "REST",
"baseUrl": "https://api.airtable.com/v0",
"authType": "BEARER_TOKEN",
"authConfig": {
"token": "{{AIRTABLE_PERSONAL_ACCESS_TOKEN}}"
},
"healthcheckPath": "/meta/bases"
},
"tools": [
{
"name": "airtable_list_bases",
"description": "List bases accessible to the Personal Access Token. Use this first to discover a base ID, for example `appABC123DEF456`.",
"parameters": { "type": "object", "properties": {} },
"endpointMapping": {
"method": "GET",
"path": "/meta/bases"
}
},
{
"name": "airtable_list_tables",
"description": "List a base's table schemas, including table IDs, names, fields, and views. Use this to discover a table ID such as `tblABC123DEF456` before reading records.",
"parameters": {
"type": "object",
"properties": {
"baseId": {
"type": "string",
"description": "Base ID from `airtable_list_bases`, for example `appABC123DEF456`."
}
},
"required": ["baseId"]
},
"endpointMapping": {
"method": "GET",
"path": "/meta/bases/{baseId}/tables"
}
},
{
"name": "airtable_list_records",
"description": "List records from a table. The response may include an `offset`; pass it to the next call until it is absent. To filter records, use Airtable formula syntax, for example `filterByFormula: {Status}=\"Active\"`.",
"parameters": {
"type": "object",
"properties": {
"baseId": {
"type": "string",
"description": "Base ID, for example `appABC123DEF456`."
},
"tableIdOrName": {
"type": "string",
"description": "Table ID or table name, for example `tblABC123DEF456` or `Tasks`. Prefer the table ID returned by `airtable_list_tables`."
},
"filterByFormula": {
"type": "string",
"description": "Airtable formula that records must satisfy, for example `{Status}=\"Active\"`. Field names are wrapped in braces."
},
"view": {
"type": "string",
"description": "Saved view name or ID to apply its filters and sorting, for example `Active tasks`."
},
"pageSize": {
"type": "integer",
"description": "Records per response page, from 1 to 100. For example, `100`."
},
"maxRecords": {
"type": "integer",
"description": "Maximum total number of records Airtable should return, for example `250`."
},
"offset": {
"type": "string",
"description": "Pagination cursor from the previous response, for example `itrABC123DEF456`. Omit for the first page."
}
},
"required": ["baseId", "tableIdOrName"]
},
"endpointMapping": {
"method": "GET",
"path": "/{baseId}/{tableIdOrName}",
"queryParams": {
"filterByFormula": "$filterByFormula",
"view": "$view",
"pageSize": "$pageSize",
"maxRecords": "$maxRecords",
"offset": "$offset"
}
}
},
{
"name": "airtable_get_record",
"description": "Get one record by ID from a table, for example record ID `recABC123DEF456`. Use `airtable_list_records` to find record IDs.",
"parameters": {
"type": "object",
"properties": {
"baseId": {
"type": "string",
"description": "Base ID, for example `appABC123DEF456`."
},
"tableIdOrName": {
"type": "string",
"description": "Table ID or table name, for example `tblABC123DEF456` or `Tasks`."
},
"recordId": {
"type": "string",
"description": "Record ID, for example `recABC123DEF456`."
}
},
"required": ["baseId", "tableIdOrName", "recordId"]
},
"endpointMapping": {
"method": "GET",
"path": "/{baseId}/{tableIdOrName}/{recordId}"
}
}
]
}
2 changes: 1 addition & 1 deletion server.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.HelpCode-ai/anythingmcp",
"description": "189 connectors + any REST/SOAP/GraphQL/SQL as MCP tools for Claude & ChatGPT. Self-hosted, AGPL.",
"description": "190 connectors + any REST/SOAP/GraphQL/SQL as MCP tools for Claude & ChatGPT. Self-hosted, AGPL.",
"repository": {
"url": "https://github.com/HelpCode-ai/anythingmcp",
"source": "github"
Expand Down
Loading