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 CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ abstract: >
server that turns REST/OpenAPI, SOAP/WSDL and GraphQL APIs, SQL/NoSQL
databases and other MCP servers into tools for AI clients such as Claude,
ChatGPT, Google Gemini, GitHub Copilot and Cursor, without writing code.
It ships 266 pre-built adapters, with a focus on ERP and e-commerce
It ships 261 pre-built adapters, with a focus on ERP and e-commerce
systems (SAP Business One, Odoo, Xentral, JTL-Wawi, weclapp, Shopware,
WooCommerce, Amazon Seller, Kaufland, OTTO, etc.), a per-workspace
knowledge graph served over MCP, per-tool response mapping,
Expand Down
6 changes: 3 additions & 3 deletions README.de.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center">
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.de.png" alt="AnythingMCP macht ERP-, E-Commerce-, REST-, SOAP- und SQL-Systeme zu MCP-Tools für Claude und ChatGPT: 266 Connectors, 21 davon ohne API-Schlüssel." width="100%" />
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.de.png" alt="AnythingMCP macht ERP-, E-Commerce-, REST-, SOAP- und SQL-Systeme zu MCP-Tools für Claude und ChatGPT: 261 Connectors, 15 davon ohne API-Schlüssel." width="100%" />
</p>

<h1 align="center">AnythingMCP: selbst gehostetes MCP-Gateway</h1>
Expand All @@ -19,7 +19,7 @@

<p align="center">
<strong>AnythingMCP ist ein quelloffenes, selbst gehostetes MCP-Gateway, das jedes REST-/OpenAPI-, SOAP-, GraphQL-, OData- oder SQL-System in MCP-Tools für Claude, ChatGPT und Copilot verwandelt, ohne dass du einen MCP-Server programmierst.</strong><br/>
Es bringt 266 fertige Adapter mit, darunter SAP, Etsy, weclapp und Amazon Seller; 21 davon kommen ohne API-Schlüssel aus.
Es bringt 261 fertige Adapter mit, darunter SAP, Etsy, weclapp und Amazon Seller; 15 davon kommen ohne API-Schlüssel aus.
</p>

<p align="center">
Expand Down Expand Up @@ -111,7 +111,7 @@ Tools werden zur Laufzeit registriert, ohne Neustart. `{{VAR}}`-Werte pro Connec

## Connector-Katalog

266 Adapter mit über 2.400 Tools. Zu jedem gibt es eine Einrichtungsanleitung auf [anythingmcp.com/de/guides](https://anythingmcp.com/de/guides), in sieben Sprachen.
261 Adapter mit über 2.400 Tools. Zu jedem gibt es eine Einrichtungsanleitung auf [anythingmcp.com/de/guides](https://anythingmcp.com/de/guides), in sieben Sprachen.

| Kategorie | Beispiele |
|---|---|
Expand Down
6 changes: 3 additions & 3 deletions README.ja.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center">
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.ja.png" alt="AnythingMCP は ERP、E コマース、REST、SOAP、SQL の各システムを Claude と ChatGPT 用の MCP ツールに変換します。266 のコネクター、うち 21 は API キー不要。" width="100%" />
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.ja.png" alt="AnythingMCP は ERP、E コマース、REST、SOAP、SQL の各システムを Claude と ChatGPT 用の MCP ツールに変換します。261 のコネクター、うち 15 は API キー不要。" width="100%" />
</p>

<h1 align="center">AnythingMCP:セルフホスト型 MCP ゲートウェイ</h1>
Expand All @@ -19,7 +19,7 @@

<p align="center">
<strong>AnythingMCP は、オープンソースのセルフホスト型 MCP ゲートウェイです。MCP サーバーを書かずに、REST/OpenAPI、SOAP、GraphQL、OData、SQL のあらゆるシステムを Claude、ChatGPT、Copilot 用の MCP ツールに変換します。</strong><br/>
SAP、Etsy、weclapp、Amazon Seller などを含む 266 種類の既製アダプターを同梱しており、うち 21 は API キー不要です。
SAP、Etsy、weclapp、Amazon Seller などを含む 261 種類の既製アダプターを同梱しており、うち 15 は API キー不要です。
</p>

<p align="center">
Expand Down Expand Up @@ -111,7 +111,7 @@ amd64 ではイメージの取得に約 30 秒、その 24 秒後に API が利

## コネクターカタログ

266 個のアダプターで 2,400 以上のツールを提供しています。どのアダプターにも [anythingmcp.com/ja/guides](https://anythingmcp.com/ja/guides) に 7 言語の設定ガイドがあります。
261 個のアダプターで 2,400 以上のツールを提供しています。どのアダプターにも [anythingmcp.com/ja/guides](https://anythingmcp.com/ja/guides) に 7 言語の設定ガイドがあります。

| カテゴリー | 例 |
|---|---|
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center">
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.png" alt="AnythingMCP turns ERP, e-commerce, REST, SOAP and SQL systems into MCP tools for Claude and ChatGPT: 266 connectors, 21 of them with no API key." width="100%" />
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.png" alt="AnythingMCP turns ERP, e-commerce, REST, SOAP and SQL systems into MCP tools for Claude and ChatGPT: 261 connectors, 15 of them with no API key." width="100%" />
</p>

<h1 align="center">AnythingMCP: self-hosted MCP gateway</h1>
Expand All @@ -19,7 +19,7 @@

<p align="center">
<strong>AnythingMCP is an open-source, self-hosted MCP gateway that turns any REST/OpenAPI, SOAP, GraphQL, OData or SQL system into MCP tools for Claude, ChatGPT and Copilot, without writing an MCP server.</strong><br/>
It ships 266 ready connectors, among them SAP, Etsy, weclapp and Amazon Seller, and 21 of them need no API key.
It ships 261 ready connectors, among them SAP, Etsy, weclapp and Amazon Seller, and 15 of them need no API key.
</p>

<p align="center">
Expand Down Expand Up @@ -103,7 +103,7 @@ Tools register at runtime, without a restart. Per-connector `{{VAR}}` values are

## Connector catalog

266 adapters, exposing 2,400+ tools. Every one has a setup guide on [anythingmcp.com/guides](https://anythingmcp.com/guides), in seven languages.
261 adapters, exposing 2,400+ tools. Every one has a setup guide on [anythingmcp.com/guides](https://anythingmcp.com/guides), in seven languages.

| Category | Examples |
|---|---|
Expand Down
6 changes: 3 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p align="center">
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.zh-CN.png" alt="AnythingMCP 将 ERP、电子商务、REST、SOAP 和 SQL 系统转化为 Claude 和 ChatGPT 可用的 MCP 工具:266 个连接器,其中 21 个无需 API 密钥。" width="100%" />
<img src="https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/badges/banner.zh-CN.png" alt="AnythingMCP 将 ERP、电子商务、REST、SOAP 和 SQL 系统转化为 Claude 和 ChatGPT 可用的 MCP 工具:261 个连接器,其中 15 个无需 API 密钥。" width="100%" />
</p>

<h1 align="center">AnythingMCP:自行托管的 MCP 网关</h1>
Expand All @@ -19,7 +19,7 @@

<p align="center">
<strong>AnythingMCP 是一个开源、可自行托管的 MCP 网关,无需编写 MCP 服务器,即可将任意 REST/OpenAPI、SOAP、GraphQL、OData 或 SQL 系统转化为 Claude、ChatGPT 和 Copilot 可用的 MCP 工具。</strong><br/>
它自带 266 个现成适配器,涵盖 SAP、Etsy、weclapp 和 Amazon Seller 等,其中 21 个无需 API 密钥。
它自带 261 个现成适配器,涵盖 SAP、Etsy、weclapp 和 Amazon Seller 等,其中 15 个无需 API 密钥。
</p>

<p align="center">
Expand Down Expand Up @@ -111,7 +111,7 @@ docker compose up -d

## 连接器目录

共 266 个适配器,提供 2,400 多个工具。每个适配器都在 [anythingmcp.com/zh/guides](https://anythingmcp.com/zh/guides) 上提供七种语言的配置指南。
共 261 个适配器,提供 2,400 多个工具。每个适配器都在 [anythingmcp.com/zh/guides](https://anythingmcp.com/zh/guides) 上提供七种语言的配置指南。

| 类别 | 示例 |
|---|---|
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": "Turn any REST/OpenAPI, SOAP/WSDL, GraphQL, OData or SQL API into MCP tools for Claude, ChatGPT and Copilot, no code. 266 pre-built adapters for ERP and e-commerce (SAP S/4HANA, SAP Business One, Odoo, Xentral, JTL-Wawi, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland, OTTO\u2026) and more. Self-hosted, knowledge graph, per-tool response mapping, OAuth2/RBAC/SSO/audit. Open source under AGPL-3.0."
"description": "Turn any REST/OpenAPI, SOAP/WSDL, GraphQL, OData or SQL API into MCP tools for Claude, ChatGPT and Copilot, no code. 261 pre-built adapters for ERP and e-commerce (SAP S/4HANA, SAP Business One, Odoo, Xentral, JTL-Wawi, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland, OTTO\u2026) and more. 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.17.0",
"description": "Turn any REST/OpenAPI, SOAP/WSDL, GraphQL, OData or SQL API into MCP tools for Claude, ChatGPT and Copilot, no code. 266 pre-built adapters for ERP, e-commerce and more (SAP S/4HANA, SAP Business One, Odoo, Xentral, JTL-Wawi, Shopware, WooCommerce, Amazon Seller). Self-hosted, open source (AGPL-3.0).",
"description": "Turn any REST/OpenAPI, SOAP/WSDL, GraphQL, OData or SQL API into MCP tools for Claude, ChatGPT and Copilot, no code. 261 pre-built adapters for ERP, e-commerce and more (SAP S/4HANA, SAP Business One, Odoo, Xentral, JTL-Wawi, Shopware, WooCommerce, Amazon Seller). Self-hosted, open source (AGPL-3.0).",
"private": true,
"license": "AGPL-3.0-only",
"engines": {
Expand Down
27 changes: 27 additions & 0 deletions packages/backend/src/adapters/adapters.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,3 +347,30 @@ describe('AdaptersService starter pack', () => {
);
});
});

describe('AdaptersService unlisted adapters', () => {
const { getAdapter } = jest.requireActual('./catalog');

function service(mode?: string) {
const svc = Object.create(AdaptersService.prototype) as AdaptersService;
(svc as any).configService = { get: (k: string) => (k === 'DEPLOYMENT_MODE' ? mode : undefined) };
return svc;
}

// Did not match the vendor's API and could not be verified (Oct 2026 audit).
const unlisted = ['teamsystem', 'sage-100', 'elo', 'cas-genesisworld', 'haufe-x360', 'zucchetti'];

it('are neither listed nor installable, on the cloud or on self-host', () => {
for (const mode of ['cloud', undefined]) {
const listed = service(mode).listAll().map((a) => a.slug);
for (const slug of unlisted) {
expect({ mode, slug, listed: listed.includes(slug) }).toEqual({ mode, slug, listed: false });
expect(() => service(mode).getBySlug(slug)).toThrow(/not found/);
}
}
});

it('stay resolvable by slug, so connectors installed earlier keep their icon and re-sync', () => {
for (const slug of unlisted) expect(getAdapter(slug)?.unlisted).toBe(true);
});
});
4 changes: 3 additions & 1 deletion packages/backend/src/adapters/adapters.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,9 @@ export class AdaptersService {
* the catalog. From the cloud's datacenter address they fail every call, so
* the cloud does not list them at all. Self-host shows them as usual.
*/
private isInstallableHere(adapter: { selfHostOnly?: boolean }): boolean {
private isInstallableHere(adapter: { selfHostOnly?: boolean; unlisted?: boolean }): boolean {
// Unlisted adapters do not match the vendor's API; nowhere offers them.
if (adapter.unlisted) return false;
if (!adapter.selfHostOnly) return true;
return this.configService.get<string>('DEPLOYMENT_MODE') !== 'cloud';
}
Expand Down
13 changes: 8 additions & 5 deletions packages/backend/src/adapters/be/teamleader.json
Original file line number Diff line number Diff line change
Expand Up @@ -311,13 +311,16 @@
},
{
"name": "teamleader_list_quotations",
"description": "List quotations with their deal, total, status and validity date, to see what is out with prospects and not yet accepted.",
"description": "List quotations with their deal, total, status and validity date, optionally limited to given quotation ids. Teamleader has no deal filter here: read a deal with teamleader_get_deal, take the ids of its quotations and pass them as `ids`.",
"parameters": {
"type": "object",
"properties": {
"deal_id": {
"type": "string",
"description": "Restrict to one deal's quotations."
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Quotation UUIDs to return. Omit for all quotations."
},
"page_size": {
"type": "number",
Expand All @@ -334,7 +337,7 @@
"path": "/quotations.list",
"bodyMapping": {
"filter": {
"deal_id": "$deal_id"
"ids": "$ids"
},
"page": {
"size": "$page_size",
Expand Down
8 changes: 8 additions & 0 deletions packages/backend/src/adapters/be/teamleader.live.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ describe('teamleader adapter — static spec conformance', () => {
it("warns that the refresh token rotates on every use", () => {
expect((adapter as unknown as { instructions: string }).instructions).toContain('rotate');
});

it("filters quotations by id, the only filter quotations.list has", () => {
const t = a.tools.find((x) => x.name === 'teamleader_list_quotations')!;
expect(t.endpointMapping.bodyMapping).toEqual({
filter: { ids: '$ids' },
page: { size: '$page_size', number: '$page_number' },
});
});
});

// Opt-in live check. Needs real credentials; skipped in CI.
Expand Down
9 changes: 9 additions & 0 deletions packages/backend/src/adapters/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ import * as nominatim from './intl/nominatim.json';
import * as nutshellCrm from './intl/nutshell-crm.json';
import * as oddsApi from './intl/odds-api.json';
import * as odoo from './intl/odoo.json';
import * as odooJsonrpc from './intl/odoo-jsonrpc.json';
import * as omnisend from './intl/omnisend.json';
import * as opentable from './intl/opentable.json';
import * as openweather from './intl/openweather.json';
Expand Down Expand Up @@ -312,6 +313,12 @@ export interface AdapterMeta {
* scraper). Listed on self-host, hidden on the cloud, and excluded from the
* advertised "no API key" count. See scripts/probe-keyless.mjs. */
selfHostOnly?: boolean;
/** Not offered anywhere: left out of the catalog listing, the install
* endpoint and the advertised count, on the cloud and on self-host alike.
* For adapters that do not match the vendor's real API and could not be
* verified (Oct 2026 audit of the #642 batch). Still resolvable by slug, so
* a connector installed earlier keeps its icon and catalog re-sync. */
unlisted?: boolean;
/** A safe, read-only call that proves the connector works: run right after
* import so a wrong credential is reported on the install form instead of
* by the agent days later, and by scripts/probe-keyless.mjs in CI. Params
Expand Down Expand Up @@ -601,6 +608,7 @@ const RAW_ADAPTERS: AdapterDefinition[] = [
nutshellCrm as unknown as AdapterDefinition,
oddsApi as unknown as AdapterDefinition,
odoo as unknown as AdapterDefinition,
odooJsonrpc as unknown as AdapterDefinition,
omnisend as unknown as AdapterDefinition,
opentable as unknown as AdapterDefinition,
openweather as unknown as AdapterDefinition,
Expand Down Expand Up @@ -722,6 +730,7 @@ export function listAdapters(): AdapterMeta[] {
featured: adapter.featured,
priority: adapter.priority,
selfHostOnly: adapter.selfHostOnly,
unlisted: adapter.unlisted,
probe: adapter.probe,
}));
}
Expand Down
Loading
Loading