diff --git a/CITATION.cff b/CITATION.cff index ed0f5172..d71af617 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -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 264 pre-built adapters, with a focus on ERP and e-commerce + It ships 265 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, diff --git a/README.de.md b/README.de.md index b1282721..f5dc8f6e 100644 --- a/README.de.md +++ b/README.de.md @@ -1,5 +1,5 @@
-
+
Mach aus jeder REST-/OpenAPI-, SOAP-, GraphQL- oder SQL-API MCP-Tools für Claude, ChatGPT und Copilot.
- Selbst gehosteter MCP-Server und MCP-Gateway, ohne Code. 264 fertige Adapter, auch für ERP und E-Commerce: SAP Business One, Xentral, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland und viele mehr.
+ Selbst gehosteter MCP-Server und MCP-Gateway, ohne Code. 265 fertige Adapter, auch für ERP und E-Commerce: SAP Business One, Xentral, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland und viele mehr.
@@ -40,7 +40,7 @@ docker compose up -d # → http://localhost:3000 Drei Begriffe tauchen immer wieder auf und bezeichnen unterschiedliche Dinge: -- Ein **Adapter** ist eine der 264 JSON-Definitionen in diesem Repository — SAP Business One, Odoo, weclapp, Xentral, Shopware, WooCommerce, Amazon Seller, DHL und viele weitere. 21 davon benötigen überhaupt keinen API-Schlüssel; bei den anderen gibst du deine Zugangsdaten beim Import an. +- Ein **Adapter** ist eine der 265 JSON-Definitionen in diesem Repository — SAP Business One, Odoo, weclapp, Xentral, Shopware, WooCommerce, Amazon Seller, DHL und viele weitere. 21 davon benötigen überhaupt keinen API-Schlüssel; bei den anderen gibst du deine Zugangsdaten beim Import an. - Ein **Connector** entsteht, wenn du einen Adapter oder deine eigene OpenAPI-Spezifikation, Postman-Collection, WSDL, einen GraphQL-Endpunkt oder eine Datenbank in deinem Workspace konfigurierst. In wenigen Minuten lässt sich so eine Verbindung einrichten, ohne einen MCP-Server zu programmieren. - Ein **MCP-Server** ist die URL, die du Claude übergibst. Er stellt ausschließlich die Connectors bereit, die du ihm zuweist. @@ -334,7 +334,7 @@ KI-Clients sprechen MCP, deine Systeme dagegen REST, SOAP, GraphQL und SQL. Eine ## Der Adapterkatalog -264 Adapter mit mehr als 2.400 Tools. **21 benötigen keinen API-Schlüssel**. Bei den übrigen gibst du deine Zugangsdaten beim Import an; danach stehen die Tools sofort bereit. Für jeden Adapter gibt es auf [anythingmcp.com/guides](https://anythingmcp.com/guides) eine Einrichtungsanleitung in sieben Sprachen. +265 Adapter mit mehr als 2.400 Tools. **21 benötigen keinen API-Schlüssel**. Bei den übrigen gibst du deine Zugangsdaten beim Import an; danach stehen die Tools sofort bereit. Für jeden Adapter gibt es auf [anythingmcp.com/guides](https://anythingmcp.com/guides) eine Einrichtungsanleitung in sieben Sprachen. | Kategorie | Beispiele | |---|---| diff --git a/README.ja.md b/README.ja.md index 454b5c97..a693b21b 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,5 +1,5 @@
-
+
REST/OpenAPI、SOAP、GraphQL、SQL のあらゆる API を、Claude、ChatGPT、Copilot 用の MCP ツールに変換します。
- コード不要のセルフホスト型 MCP サーバー兼ゲートウェイです。SAP Business One、Odoo、Xentral、weclapp、Shopware、WooCommerce、Amazon Seller、Kaufland など、ERP や E コマースを含む 264 種類の既製アダプターを用意しています。
+ コード不要のセルフホスト型 MCP サーバー兼ゲートウェイです。SAP Business One、Odoo、Xentral、weclapp、Shopware、WooCommerce、Amazon Seller、Kaufland など、ERP や E コマースを含む 265 種類の既製アダプターを用意しています。
@@ -40,7 +40,7 @@ docker compose up -d # → http://localhost:3000 この文書で繰り返し使う 3 つの用語は、それぞれ異なるものを指します。 -- **アダプター(adapter)**は、このリポジトリに含まれる 264 個の JSON 定義のいずれかです。SAP Business One、Odoo、weclapp、Xentral、Shopware、WooCommerce、Amazon Seller、DHL などがあります。そのうち 21 個は API キーを一切必要とせず、それ以外はインポート時に認証情報を設定します。 +- **アダプター(adapter)**は、このリポジトリに含まれる 265 個の JSON 定義のいずれかです。SAP Business One、Odoo、weclapp、Xentral、Shopware、WooCommerce、Amazon Seller、DHL などがあります。そのうち 21 個は API キーを一切必要とせず、それ以外はインポート時に認証情報を設定します。 - **コネクター(connector)**は、アダプター、または独自の OpenAPI 仕様・Postman コレクション・WSDL・GraphQL エンドポイント・データベースを、ワークスペース内で設定したものです。接続先を指定すれば、MCP サーバーを書くことなく数分で設定できます。 - **MCP サーバー**は、Claude に渡す URL です。そのサーバーに割り当てたコネクターだけを公開します。 @@ -334,7 +334,7 @@ AI クライアントは MCP を使いますが、業務システムは REST、S ## アダプターカタログ -264 個のアダプターで、2,400 以上のツールを公開できます。**21 個は API キーが不要**です。それ以外はインポート時に認証情報を設定すれば、すぐにツールを利用できます。各アダプターには [anythingmcp.com/guides](https://anythingmcp.com/guides) で 7 言語のセットアップガイドを用意しています。 +265 個のアダプターで、2,400 以上のツールを公開できます。**21 個は API キーが不要**です。それ以外はインポート時に認証情報を設定すれば、すぐにツールを利用できます。各アダプターには [anythingmcp.com/guides](https://anythingmcp.com/guides) で 7 言語のセットアップガイドを用意しています。 | カテゴリー | 例 | |---|---| diff --git a/README.md b/README.md index f7d40b8f..bc355c54 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-
+
Turn any REST/OpenAPI, SOAP, GraphQL or SQL API into MCP tools for Claude, ChatGPT and Copilot.
- A self-hosted MCP server and gateway, no code, 264 ready connectors including ERP and e-commerce: SAP Business One, Odoo, Xentral, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland and more.
+ A self-hosted MCP server and gateway, no code, 265 ready connectors including ERP and e-commerce: SAP Business One, Odoo, Xentral, weclapp, Shopware, WooCommerce, Amazon Seller, Kaufland and more.
@@ -43,7 +43,7 @@ docker compose up -d # → http://localhost:3000 Three words appear throughout and mean three different things: -- an **adapter** is one of the 264 JSON definitions that ship in this repo — SAP Business One, Odoo, weclapp, Xentral, Shopware, WooCommerce, Amazon Seller, DHL and the rest. 21 of them need no API key at all; the others ask for your credentials at import. +- an **adapter** is one of the 265 JSON definitions that ship in this repo — SAP Business One, Odoo, weclapp, Xentral, Shopware, WooCommerce, Amazon Seller, DHL and the rest. 21 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. @@ -335,7 +335,7 @@ AI clients speak MCP, but your systems speak REST, SOAP, GraphQL and SQL. Writin ## The adapter catalog -264 adapters, exposing 2,400+ tools. **21 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. +265 adapters, exposing 2,400+ tools. **21 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 | |---|---| diff --git a/README.zh-CN.md b/README.zh-CN.md index 0fe66500..9ab18086 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,5 +1,5 @@
-
+
将任意 REST/OpenAPI、SOAP、GraphQL 或 SQL API 转化为 Claude、ChatGPT 和 Copilot 可用的 MCP 工具。
- 自行托管的 MCP 服务器与网关,无需编写代码,264 个现成适配器开箱即用,涵盖 ERP 和电子商务:SAP Business One、Odoo、Xentral、weclapp、Shopware、WooCommerce、Amazon Seller、Kaufland 等。
+ 自行托管的 MCP 服务器与网关,无需编写代码,265 个现成适配器开箱即用,涵盖 ERP 和电子商务:SAP Business One、Odoo、Xentral、weclapp、Shopware、WooCommerce、Amazon Seller、Kaufland 等。
@@ -40,7 +40,7 @@ docker compose up -d # → http://localhost:3000
本文反复使用的三个术语,分别指不同的概念:
-- **适配器(adapter)**:本仓库随附的 264 个 JSON 定义之一,例如 SAP Business One、Odoo、weclapp、Xentral、Shopware、WooCommerce、Amazon Seller、DHL 等。其中 21 个完全不需要 API 密钥,其余适配器会在导入时要求你提供相应凭据。
+- **适配器(adapter)**:本仓库随附的 265 个 JSON 定义之一,例如 SAP Business One、Odoo、weclapp、Xentral、Shopware、WooCommerce、Amazon Seller、DHL 等。其中 21 个完全不需要 API 密钥,其余适配器会在导入时要求你提供相应凭据。
- **连接器(connector)**:在工作区中配置好的适配器,或你自己的 OpenAPI 规范、Postman 集合、WSDL、GraphQL 端点或数据库。只要有可连接的目标,就能在几分钟内完成配置,无需编写 MCP 服务器。
- **MCP 服务器**:你提供给 Claude 的那个 URL。它只公开分配给它的连接器,不会公开其他连接器。
@@ -334,7 +334,7 @@ AI 客户端使用 MCP,而你的系统使用 REST、SOAP、GraphQL 和 SQL。
## 适配器目录
-264 个适配器,提供 2,400 多个工具。**其中 21 个不需要 API 密钥**,其余适配器会在导入时要求提供凭据,导入后工具即可立即使用。每个适配器都在 [anythingmcp.com/guides](https://anythingmcp.com/guides) 上提供七种语言的设置指南。
+265 个适配器,提供 2,400 多个工具。**其中 21 个不需要 API 密钥**,其余适配器会在导入时要求提供凭据,导入后工具即可立即使用。每个适配器都在 [anythingmcp.com/guides](https://anythingmcp.com/guides) 上提供七种语言的设置指南。
| 分类 | 示例 |
|---|---|
diff --git a/glama.json b/glama.json
index 9c394f71..22d16b5a 100644
--- a/glama.json
+++ b/glama.json
@@ -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. 264 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. 265 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."
}
diff --git a/package.json b/package.json
index e2e00aab..2af75d72 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "anythingmcp",
"version": "0.14.1",
- "description": "Turn any REST/OpenAPI, SOAP/WSDL, GraphQL, OData or SQL API into MCP tools for Claude, ChatGPT and Copilot, no code. 264 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. 265 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": {
diff --git a/packages/backend/src/adapters/catalog.ts b/packages/backend/src/adapters/catalog.ts
index a7e622a5..da015732 100644
--- a/packages/backend/src/adapters/catalog.ts
+++ b/packages/backend/src/adapters/catalog.ts
@@ -108,6 +108,7 @@ import * as etsy from './intl/etsy.json';
import * as fathom from './intl/fathom.json';
import * as fhir from './intl/fhir.json';
import * as fillout from './intl/fillout.json';
+import * as firma from './intl/firma.json';
import * as flutterwave from './intl/flutterwave.json';
import * as folk from './intl/folk.json';
import * as freshbooks from './intl/freshbooks.json';
@@ -530,6 +531,7 @@ const RAW_ADAPTERS: AdapterDefinition[] = [
fathom as unknown as AdapterDefinition,
fhir as unknown as AdapterDefinition,
fillout as unknown as AdapterDefinition,
+ firma as unknown as AdapterDefinition,
flutterwave as unknown as AdapterDefinition,
folk as unknown as AdapterDefinition,
freshbooks as unknown as AdapterDefinition,
diff --git a/packages/backend/src/adapters/intl/firma.json b/packages/backend/src/adapters/intl/firma.json
new file mode 100644
index 00000000..664628b4
--- /dev/null
+++ b/packages/backend/src/adapters/intl/firma.json
@@ -0,0 +1,486 @@
+{
+ "slug": "firma",
+ "name": "Firma.dev",
+ "description": "Firma.dev e-signature from any AI agent: templates, signing requests from a template, sending and reminders, recipient status, audit trail and signed PDFs. 13 tools, API-key auth, with free test keys.",
+ "instructions": "This connector drives **Firma.dev** (api.firma.dev), a developer-first e-signature API: templates, signing requests (envelopes), their recipients, audit trail and signed documents. 13 tools.\n\n**Setup**\n1. Sign up at https://firma.dev (free, no card) and open your workspace in the dashboard.\n2. Copy an API key into `FIRMA_API_KEY`. Every workspace has two: the **test** key creates watermarked test requests and consumes **no credits**, the **live** key sends real, legally binding requests and consumes one credit per envelope (about €0.049). Start with the test key.\n3. The key is sent as the `Authorization` header, without a Bearer prefix. It is stored encrypted.\n\nA workspace key only sees that workspace's templates and requests. The account's main key (protected workspace) sees the company account too.\n\n**The usual flow: a document from a template**\n1. `firma_list_templates` (filter by `name`) and `firma_get_template` to find the template.\n2. `firma_list_template_recipients` for its recipient slots: each has an `id` (use it as `template_user_id`), a `designation` (Signer, Approver, CC) and an `order`.\n3. `firma_create_signing_request_from_template` with the real people for those slots. This creates a **draft**: nothing is emailed and no credit is used.\n4. Show the user the draft (name, recipients, emails) and ask for confirmation. Then `firma_send_signing_request`: this emails every signer and, on a live key, consumes one credit. `firma_get_company` shows the remaining `credits`.\n5. Track it with `firma_get_signing_request` (status flags and timestamps), `firma_list_signing_request_recipients` (who signed, who declined and why, who is still missing fields) and `firma_get_signing_request_audit`.\n6. When it is finished, `firma_get_signed_document_url` returns a short-lived download URL for the signed PDF.\n\n**Rules**\n- Never send, resend or cancel without the user's explicit go-ahead: these email real people.\n- `firma_resend_signing_request` only reaches recipients who are eligible to sign now (with a signing order, only the current step) and never people who already signed.\n- `firma_cancel_signing_request` works only on sent requests that are not finished or cancelled; set `notify_signers` to tell them.\n- Status values for filtering: `not_sent`, `in_progress`, `finished`, `cancelled`, `declined`, `expired` (comma-separated for several).\n- Dates are ISO 8601. Lists are paginated: `pagination.total_pages` tells you whether to ask for the next `page`.\n\n**Errors**: 401 `INVALID_API_KEY` = wrong or revoked key; 402 or a credits message = the account needs credits (or use the test key); 429 = rate limit (200 reads and 120 writes per minute per key), wait for `Retry-After`.",
+ "region": "intl",
+ "category": "e-signature",
+ "icon": "firma",
+ "docsUrl": "https://docs.firma.dev",
+ "requiredEnvVars": [
+ "FIRMA_API_KEY"
+ ],
+ "connector": {
+ "name": "Firma.dev",
+ "type": "REST",
+ "baseUrl": "https://api.firma.dev/functions/v1/signing-request-api",
+ "authType": "API_KEY",
+ "authConfig": {
+ "headerName": "Authorization",
+ "apiKey": "{{FIRMA_API_KEY}}"
+ }
+ },
+ "tools": [
+ {
+ "name": "firma_get_company",
+ "description": "The Firma.dev company account behind the key: name, owner, language and the remaining envelope credits. Use it before sending to check credits. Needs the account's main key; a workspace key may get 403.",
+ "parameters": {
+ "type": "object",
+ "properties": {}
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/company"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_list_templates",
+ "description": "List the workspace's templates (reusable documents with recipient slots and fields), newest first unless sorted otherwise. Filter by name to find the one to send.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Part of the template name, case-insensitive."
+ },
+ "page": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Page number, starting at 1."
+ },
+ "page_size": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "description": "Items per page (default 20)."
+ },
+ "sort_by": {
+ "type": "string",
+ "enum": [
+ "name",
+ "created_on",
+ "last_changed_on"
+ ],
+ "description": "Field to sort by."
+ },
+ "sort_order": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "description": "Sort direction."
+ }
+ }
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/templates",
+ "queryParams": {
+ "name": "$name",
+ "page": "$page",
+ "page_size": "$page_size",
+ "sort_by": "$sort_by",
+ "sort_order": "$sort_order"
+ }
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_get_template",
+ "description": "One template in full: its settings, document, fields and reminders, as it would be copied into a signing request.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "template_id": {
+ "type": "string",
+ "description": "The template id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "template_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/templates/{template_id}"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_list_template_recipients",
+ "description": "The recipient slots of a template: id (pass it as template_user_id when creating a signing request), designation (Signer, Approver, CC), signing order and any preset name or email. Call it before firma_create_signing_request_from_template.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "template_id": {
+ "type": "string",
+ "description": "The template id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "template_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/templates/{template_id}/users"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_list_signing_requests",
+ "description": "List signing requests (envelopes) with their status and dates, filtered by status, name, signer or creation date. Returns a trimmed view; use firma_get_signing_request for one request in full.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "description": "not_sent, in_progress, finished, cancelled, declined or expired; comma-separate several, e.g. 'in_progress,declined'."
+ },
+ "name": {
+ "type": "string",
+ "description": "Part of the request name, case-insensitive."
+ },
+ "signer_email": {
+ "type": "string",
+ "description": "Exact email of a signer."
+ },
+ "signer_name": {
+ "type": "string",
+ "description": "Part of a signer's name."
+ },
+ "created_after": {
+ "type": "string",
+ "description": "ISO 8601 date or timestamp."
+ },
+ "created_before": {
+ "type": "string",
+ "description": "ISO 8601 date or timestamp."
+ },
+ "page": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Page number, starting at 1."
+ },
+ "page_size": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "description": "Items per page (default 20)."
+ },
+ "sort_by": {
+ "type": "string",
+ "enum": [
+ "name",
+ "created_on",
+ "expiration_hours",
+ "sent_on",
+ "finished_on"
+ ],
+ "description": "Field to sort by."
+ },
+ "sort_order": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "description": "Sort direction."
+ }
+ }
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/signing-requests",
+ "queryParams": {
+ "status": "$status",
+ "name": "$name",
+ "signer_email": "$signer_email",
+ "signer_name": "$signer_name",
+ "created_after": "$created_after",
+ "created_before": "$created_before",
+ "page": "$page",
+ "page_size": "$page_size",
+ "sort_by": "$sort_by",
+ "sort_order": "$sort_order"
+ }
+ },
+ "responseMapping": {
+ "transform": {
+ "mode": "jmespath",
+ "expression": "{results: results[].{id: id, name: name, status: status, template_id: template_id, credit_cost: credit_cost, created_date: created_date, sent_date: sent_date, finished_date: finished_date, cancelled_date: cancelled_date, declined_date: declined_date, expires_at: expires_at, recipients: recipients[].{name: name, email: email, designation: designation, finished_on: finished_on, declined_on: declined_on}}, pagination: pagination}"
+ }
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_get_signing_request",
+ "description": "One signing request in full: status flags (sent, finished, cancelled, declined, expired), timestamps, expiry, credit cost and settings.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "signing_request_id": {
+ "type": "string",
+ "description": "The signing request id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "signing_request_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/signing-requests/{signing_request_id}"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_list_signing_request_recipients",
+ "description": "The recipients of a signing request with where each one stands: finished_on (signed), declined_on and decline_reason, signing order, and missing_fields / ready_to_send before sending. Use it to answer 'who still has to sign'.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "signing_request_id": {
+ "type": "string",
+ "description": "The signing request id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "signing_request_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/signing-requests/{signing_request_id}/users"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_get_signing_request_audit",
+ "description": "The audit trail of a signing request in chronological order: created, edited, sent and cancelled by the sender; viewed, signed, declined and downloaded by each signer.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "signing_request_id": {
+ "type": "string",
+ "description": "The signing request id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "signing_request_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/signing-requests/{signing_request_id}/audit"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_get_signed_document_url",
+ "description": "A short-lived download URL for the signed PDF of a finished signing request (or the partially signed PDF when partial download is enabled). Give the user the URL; it expires at expires_at.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "signing_request_id": {
+ "type": "string",
+ "description": "The signing request id, as returned by the list tools."
+ }
+ },
+ "required": [
+ "signing_request_id"
+ ]
+ },
+ "endpointMapping": {
+ "method": "GET",
+ "path": "/signing-requests/{signing_request_id}/download"
+ },
+ "annotations": {
+ "readOnlyHint": true
+ }
+ },
+ {
+ "name": "firma_create_signing_request_from_template",
+ "description": "Create a DRAFT signing request from a template, with the real recipients filled into the template's slots. Nothing is emailed and no credit is used until firma_send_signing_request. Get the slot ids with firma_list_template_recipients.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "template_id": {
+ "type": "string",
+ "description": "The template id, as returned by the list tools."
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the signing request, e.g. 'NDA - Acme GmbH'. Defaults to the template's name."
+ },
+ "recipients": {
+ "type": "array",
+ "description": "One entry per template slot you fill: {\"template_user_id\": \"