{
  "revision": "2026-10-23.224d40a41ff6",
  "servers": [
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "io.github.upstash/context7",
        "title": "Context7",
        "description": "Up-to-date, version-specific library and framework documentation for coding agents.",
        "version": "4.0.4",
        "repository": {
          "url": "https://github.com/upstash/context7",
          "source": "github"
        },
        "websiteUrl": "https://context7.com",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "@upstash/context7-mcp",
            "version": "4.0.4",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Context7 API key (optional; raises rate limits and enables private repositories)",
                "isRequired": false,
                "isSecret": true,
                "format": "string",
                "name": "CONTEXT7_API_KEY"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-7SO1no1tabPvC8OK8j1BBrUTysoCoUP/wHhzBTD53CDqJFKuPBxWH5MBl708vX1UwY3Ymd183SM4zLgJmwqYag==",
            "lockfile": {
              "sha512": "sha512-9X462ZJuZnEyebZ14fI7rrbNg4bkAh617aufO5EvROvVB9yetAN9Zw0QtQ90HPVK3ahY32QVXFTtGpi84wxkKw==",
              "url": "https://forgeuno.com/api/v2/mcp/context7-mcp/4.0.4/package-lock.json"
            },
            "bin": "dist/index.js",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-03-16",
            "tier": "community"
          },
          "com.forgeuno/security": {
            "level": "safe",
            "permissions": [
              "read:documentation"
            ],
            "dataExposure": "none",
            "requiresSupervisor": false,
            "riskNotes": "Read-only access to library documentation."
          },
          "com.forgeuno/capabilities": {
            "category": "search",
            "detailedDescription": "Enables AI agents to access current documentation for popular libraries and frameworks through the Model Context Protocol. Resolves library names to documentation sources and retrieves relevant, up-to-date docs on demand. Eliminates the problem of outdated training data for library APIs.",
            "whenToUse": "When the agent needs up-to-date documentation for libraries or frameworks to write correct code.",
            "whenNotToUse": "When general web search is needed rather than specific library documentation.",
            "inputTypes": [
              "text"
            ],
            "outputTypes": [
              "text",
              "markdown"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://context7.com/dashboard",
            "hint": "Optional. Without a key the server works with basic rate limits; an API key from the Context7 dashboard raises rate limits and enables private repositories."
          },
          "com.forgeuno/fields": {
            "CONTEXT7_API_KEY": {
              "label": "Context7 API Key"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": ">=20.18.1",
            "nativeModules": false,
            "startsWithoutCredentials": true,
            "credentials": "none",
            "installSizeBytes": 22645997,
            "tools": [
              {
                "name": "query-docs",
                "description": "Retrieves and queries up-to-date documentation and code examples from Context7 for any programming library or framework.\n\nYou must call 'Resolve Context7 Library ID' tool first to obtain the exact Context7-compatible library ID required to use this tool, UNLESS the user explicitly provides a library ID in the format '/org/project' or '/org/project/version' in their query.\n\nDo not call this tool more than 3 times per question.",
                "parameters": [
                  "libraryId",
                  "query"
                ],
                "required": [
                  "libraryId",
                  "query"
                ],
                "inputSchemaSha256": "6b6c59ee65e0d7fcbf0aaf4eb42f419e6b13927808ec75af09e62e55921b8942"
              },
              {
                "name": "resolve-library-id",
                "description": "Resolves a package/product name to a Context7-compatible library ID and returns matching libraries.\n\nYou MUST call this function before 'Query Documentation' tool to obtain a valid Context7-compatible library ID UNLESS the user explicitly provides a library ID in the format '/org/project' or '/org/project/version' in their query.\n\nEach result includes:\n- Library ID: Context7-compatible identifier (format: /org/project)\n- Name: Library or package name\n- Description: Short summary\n- Code Snippets: Number of available code examples\n- Source Reputation: Authority indicator (High, Medium, Low, or Unknown)\n- Benchmark Score: Quality indicator (100 is the highest score)\n- Versions: List of versions if available. Use one of those versions if the user provides a version in their query. The format of the version is /org/project/version.\n\nFor best results, select libraries based on name match, source reputation, snippet coverage, benchmark score, and relevance to your use case.\n\nSelection Process:\n1. Analyze the query to understand what library/package the user is looking for\n2. Return the most relevant match based on:\n- Name similarity to the query (exact matches prioritized)\n- Description relevance to the query's intent\n- Documentation coverage (prioritize libraries with higher Code Snippet counts)\n- Source reputation (consider libraries with High or Medium reputation more authoritative)\n- Benchmark Score: Quality indicator (100 is the highest score)\n\nResponse Format:\n- Return the selected library ID in a clearly marked section\n- Provide a brief explanation for why this library was chosen\n- If multiple good matches exist, acknowledge this but proceed with the most relevant one\n- If no good matches exist, clearly state this and suggest query refinements\n\nFor ambiguous queries, request clarification before proceeding with a best-guess match.\n\nIMPORTANT: Do not call this tool more than 3 times per question. If you cannot find what you need after 3 calls, use the best result you have.",
                "parameters": [
                  "libraryName",
                  "query"
                ],
                "required": [
                  "libraryName",
                  "query"
                ],
                "inputSchemaSha256": "ff2f303df2072ada223b45bd44955411763b5b6513f9a680400872732fe976b6"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "为编程智能体提供最新、按版本区分的库与框架文档。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 获取常用库和框架的最新文档：把库名解析为文档来源，按需检索相关的最新文档，避免依赖过时的训练数据编写库 API 调用。",
                "whenToUse": "智能体需要某个库或框架的最新文档来编写正确代码时。",
                "whenNotToUse": "需要通用网页搜索、而不是特定库文档时。"
              },
              "credentials": {
                "hint": "可选。不填写时以基础速率限制使用；在 Context7 控制台创建 API 密钥可提高速率限制并访问私有仓库。"
              },
              "fields": {
                "CONTEXT7_API_KEY": {
                  "label": "Context7 API 密钥",
                  "description": "Context7 API 密钥（可选，用于提高速率限制和访问私有仓库）"
                }
              },
              "security": {
                "riskNotes": "只读访问库文档。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "context7-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "com.forgeuno/email-mcp",
        "title": "Email (IMAP + SMTP)",
        "description": "Read and send email over standard IMAP and SMTP with any email provider.",
        "version": "2.0.2",
        "repository": {
          "url": "https://github.com/yunfeizhu/mcp-mail-server",
          "source": "github"
        },
        "websiteUrl": "https://github.com/yunfeizhu/mcp-mail-server",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "mcp-mail-server",
            "version": "2.0.2",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Email account username, usually the email address",
                "isRequired": true,
                "isSecret": false,
                "format": "string",
                "name": "EMAIL_USER"
              },
              {
                "description": "Email password or app password",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "EMAIL_PASS"
              },
              {
                "description": "IMAP server host, for example imap.gmail.com",
                "isRequired": true,
                "isSecret": false,
                "format": "string",
                "name": "IMAP_HOST"
              },
              {
                "description": "IMAP port (implicit TLS, normally 993)",
                "isRequired": true,
                "isSecret": false,
                "format": "number",
                "default": "993",
                "name": "IMAP_PORT"
              },
              {
                "description": "IMAP over implicit TLS; this version does not support other modes",
                "isRequired": true,
                "isSecret": false,
                "format": "boolean",
                "value": "true",
                "name": "IMAP_SECURE"
              },
              {
                "description": "SMTP server host, for example smtp.gmail.com",
                "isRequired": true,
                "isSecret": false,
                "format": "string",
                "name": "SMTP_HOST"
              },
              {
                "description": "SMTP port (465 for implicit TLS, 587 for STARTTLS)",
                "isRequired": true,
                "isSecret": false,
                "format": "number",
                "default": "465",
                "name": "SMTP_PORT"
              },
              {
                "description": "Use implicit TLS (true, port 465); false requires STARTTLS (port 587)",
                "isRequired": true,
                "isSecret": false,
                "format": "boolean",
                "default": "true",
                "name": "SMTP_SECURE"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-q8gO4322tHDmQZHumdaNbZeKWODdWsj3u8n0xFJj6Zlln41Bu60mF+RsrChoTFg+JvZrFZ1MuxraHzHdEYnu7w==",
            "lockfile": {
              "sha512": "sha512-0R5Ta1xltulhqWtylj39aWDIiczK1qNWDIBz4J+XyehrKREXaJIAH3ockJNZeMyO7rXw5+qwuJKKIVluhSHRsQ==",
              "url": "https://forgeuno.com/api/v2/mcp/email-mcp/2.0.2/package-lock.json"
            },
            "bin": "dist/index.js",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-03-16",
            "tier": "community"
          },
          "com.forgeuno/security": {
            "level": "restricted",
            "permissions": [
              "read:email",
              "write:email",
              "send:email"
            ],
            "dataExposure": "full",
            "requiresSupervisor": true,
            "riskNotes": "Full mailbox read access and ability to send email as the authenticated user. Ensure the agent has a clearly scoped objective before granting access. Use a dedicated automation account where possible."
          },
          "com.forgeuno/capabilities": {
            "category": "communication",
            "detailedDescription": "Enables AI agents to read, search, and send emails through the Model Context Protocol using standard IMAP (receiving) and SMTP (sending) protocols. Compatible with any email provider that supports these protocols: corporate mail servers, Tencent Enterprise Mail, Alibaba Enterprise Mail, Zoho, Microsoft Exchange/Office 365, Gmail (via app password), 163, QQ, and more. Agents can search messages, read attachments, send formatted emails, and reply to threads — all without provider-specific OAuth setup.",
            "whenToUse": "When agents need to read incoming emails, search the inbox, send reports or notifications, or reply to messages as part of automated workflows.",
            "whenNotToUse": "For high-volume transactional email sending at scale (use a dedicated SMTP relay like SendGrid instead). For Gmail-only use cases where OAuth is preferred.",
            "inputTypes": [
              "text"
            ],
            "outputTypes": [
              "text",
              "json"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "credentials",
            "hint": "Provide your email account credentials and IMAP/SMTP server settings. For Gmail use an App Password (not your login password). For enterprise mail use the IMAP/SMTP hosts provided by your IT team. IMAP must use implicit TLS (normally port 993)."
          },
          "com.forgeuno/fields": {
            "EMAIL_USER": {
              "label": "Email Address"
            },
            "EMAIL_PASS": {
              "label": "Password / App Password"
            },
            "IMAP_HOST": {
              "label": "IMAP Server"
            },
            "IMAP_PORT": {
              "label": "IMAP Port"
            },
            "SMTP_HOST": {
              "label": "SMTP Server"
            },
            "SMTP_PORT": {
              "label": "SMTP Port"
            },
            "SMTP_SECURE": {
              "label": "SMTP Implicit TLS"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "Open source MIT. No cost beyond your email provider's own service fees."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": ">=22.13.0",
            "nativeModules": false,
            "startsWithoutCredentials": false,
            "credentials": "placeholder",
            "installSizeBytes": 22455758,
            "tools": [
              {
                "name": "check_connection",
                "description": "Connect to IMAP when needed, actively verify SMTP, then return structured status for both services.",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "f973399805c1c233633f5196cf8e2ad40ee100b94996d711dcd030813b671bc5"
              },
              {
                "name": "continue_email_thread",
                "description": "Find the newest sent message with the same normalized subject, optionally narrowed by recipient and date, then continue its thread. Designed for recurring reports; reply-all and quoted history both default to true.",
                "parameters": [
                  "html",
                  "includeOriginal",
                  "recipient",
                  "replyToAll",
                  "signature",
                  "since",
                  "subject",
                  "text"
                ],
                "required": [
                  "subject"
                ],
                "inputSchemaSha256": "2521eb126ab3984164bab269ee80fe9a3e6ff4aebc39b8ff16b89071fb9caef0"
              },
              {
                "name": "delete_message",
                "description": "Permanently delete one existing mailbox-scoped message using targeted UID EXPUNGE. Fails safely when the UID is missing or the IMAP server lacks UIDPLUS, and returns a structured unknown outcome when a transport failure prevents confirmation.",
                "parameters": [
                  "mailbox",
                  "uid",
                  "uidValidity"
                ],
                "required": [
                  "mailbox",
                  "uid"
                ],
                "inputSchemaSha256": "32cc3846309c3460f9ec64ee32730182b6a1498c7be1b616322fb3636f2710df"
              },
              {
                "name": "find_unreplied_messages",
                "description": "Find messages from a sender that have no thread-header reply in the sent mailbox. Messages without Message-ID are returned separately as unknown.",
                "parameters": [
                  "before",
                  "limit",
                  "mailboxes",
                  "sender",
                  "since"
                ],
                "required": [
                  "sender"
                ],
                "inputSchemaSha256": "02cd7e8127d3a0f31cc775cee76cc3f701f2e00c4634f5c957dc78b08fc683f0"
              },
              {
                "name": "get_message",
                "description": "Retrieve one message, including full bodies and attachment metadata. Set markSeen only when the message should be marked as read.",
                "parameters": [
                  "mailbox",
                  "markSeen",
                  "uid",
                  "uidValidity"
                ],
                "required": [
                  "mailbox",
                  "uid"
                ],
                "inputSchemaSha256": "f6ded7956243463e3bb0e98984ecb7f55c1f34913398ab53f74a05dfe62446b0"
              },
              {
                "name": "get_messages",
                "description": "Retrieve multiple messages from one mailbox, including full bodies and attachment metadata. Fails if any requested UID is missing or the aggregate response-body budget would be exceeded.",
                "parameters": [
                  "mailbox",
                  "markSeen",
                  "uidValidity",
                  "uids"
                ],
                "required": [
                  "mailbox",
                  "uids"
                ],
                "inputSchemaSha256": "7b41d8db6bbfe927e7575b07cec9c917971241dce9905ca593be70356d207254"
              },
              {
                "name": "list_mailboxes",
                "description": "List all available mailboxes (folders). Auto-connects to IMAP when needed.",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "f973399805c1c233633f5196cf8e2ad40ee100b94996d711dcd030813b671bc5"
              },
              {
                "name": "move_message",
                "description": "Move an existing mailbox-scoped message to another existing mailbox. If a move, copy, or source-cleanup outcome cannot be confirmed, returns a structured partial error that must be inspected before retrying.",
                "parameters": [
                  "mailbox",
                  "targetMailbox",
                  "uid",
                  "uidValidity"
                ],
                "required": [
                  "mailbox",
                  "targetMailbox",
                  "uid"
                ],
                "inputSchemaSha256": "584c8ff6cf238cca2c4bd0ce96a86f0bc383331d52a36d4a3fb967ef4a7cd2a8"
              },
              {
                "name": "reply_to_email",
                "description": "Reply to a mailbox-scoped message with threading headers, optional reply-all recipients, signature, and quoted original content.",
                "parameters": [
                  "html",
                  "includeOriginal",
                  "mailbox",
                  "originalUid",
                  "replyToAll",
                  "signature",
                  "text",
                  "uidValidity"
                ],
                "required": [
                  "mailbox",
                  "originalUid"
                ],
                "inputSchemaSha256": "aec7e1597ed9be9478f3cd2836fd83fc29c4d172dd214b80b3f2a50d6cf5a80b"
              },
              {
                "name": "save_attachment",
                "description": "Save one or all attachments from a mailbox-scoped message into an allowed local directory. If a later write fails, returns the files already saved as a structured partial result.",
                "parameters": [
                  "attachmentIndex",
                  "mailbox",
                  "returnBase64",
                  "savePath",
                  "uid",
                  "uidValidity"
                ],
                "required": [
                  "mailbox",
                  "savePath",
                  "uid"
                ],
                "inputSchemaSha256": "dd07593cacd87cfa994c0179521e57e80c0f89ba1d545e983d4e92a7ed519c57"
              },
              {
                "name": "search_messages",
                "description": "Search one or more mailboxes with combined filters. Defaults to INBOX and the detected sent mailbox. Returns message summaries unless includeBody is true; full-body hydration fails explicitly if a selected message disappears or the aggregate response-body budget would be exceeded.",
                "parameters": [
                  "before",
                  "body",
                  "from",
                  "includeBody",
                  "keywords",
                  "limit",
                  "mailboxes",
                  "since",
                  "subject",
                  "to",
                  "unread"
                ],
                "required": [],
                "inputSchemaSha256": "05dfce61ecdc682a6d19cbe0e9db4372ee4944d90d1a069a85b785c36ace3a38"
              },
              {
                "name": "send_email",
                "description": "Send a new email via SMTP and try to save a MIME-equivalent copy with the accepted Message-ID to the sent mailbox.",
                "parameters": [
                  "attachments",
                  "bcc",
                  "cc",
                  "html",
                  "signature",
                  "subject",
                  "text",
                  "to"
                ],
                "required": [
                  "subject",
                  "to"
                ],
                "inputSchemaSha256": "7f0a8b2d031fade7ee476612a4e93843c4c4c0f3a5bd8d31ee85896f8339831b"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "通过标准 IMAP 和 SMTP 收发邮件，适用于任意邮件服务商。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 使用标准 IMAP（收信）和 SMTP（发信）协议读取、搜索和发送邮件。兼容支持这些协议的任意邮件服务商：企业邮件服务器、腾讯企业邮、阿里企业邮、Zoho、Microsoft Exchange/Office 365、Gmail（应用专用密码）、163、QQ 等。智能体可以搜索邮件、读取附件、发送格式化邮件和回复邮件，无需针对服务商配置 OAuth。",
                "whenToUse": "智能体需要读取收到的邮件、搜索收件箱、发送报告或通知，或在自动化流程中回复邮件时。",
                "whenNotToUse": "大规模发送事务性邮件时（请使用 SendGrid 等专用 SMTP 中继）；只用 Gmail 且更适合使用 OAuth 时。"
              },
              "credentials": {
                "hint": "填写邮箱账号凭据和 IMAP/SMTP 服务器设置。Gmail 请使用应用专用密码（不是登录密码）；企业邮箱请使用 IT 部门提供的 IMAP/SMTP 主机。IMAP 必须使用隐式 TLS（通常为 993 端口）。"
              },
              "fields": {
                "EMAIL_USER": {
                  "label": "邮箱地址",
                  "description": "邮箱账号用户名，通常就是邮箱地址"
                },
                "EMAIL_PASS": {
                  "label": "密码 / 应用专用密码",
                  "description": "邮箱密码或应用专用密码"
                },
                "IMAP_HOST": {
                  "label": "IMAP 服务器",
                  "description": "IMAP 服务器地址，例如 imap.gmail.com"
                },
                "IMAP_PORT": {
                  "label": "IMAP 端口",
                  "description": "IMAP 端口（隐式 TLS，通常为 993）"
                },
                "SMTP_HOST": {
                  "label": "SMTP 服务器",
                  "description": "SMTP 服务器地址，例如 smtp.gmail.com"
                },
                "SMTP_PORT": {
                  "label": "SMTP 端口",
                  "description": "SMTP 端口（隐式 TLS 用 465，STARTTLS 用 587）"
                },
                "SMTP_SECURE": {
                  "label": "SMTP 隐式 TLS",
                  "description": "是否使用隐式 TLS（true，465 端口）；false 时要求 STARTTLS（587 端口）"
                }
              },
              "security": {
                "riskNotes": "可完整读取邮箱，并以已认证用户的身份发送邮件。授予访问前请确保智能体的目标明确且范围受限；尽可能使用专用的自动化账号。"
              },
              "pricing": {
                "notes": "MIT 开源；除邮件服务商自身的费用外不收费。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "email-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "ai.exa/exa",
        "title": "Exa Search",
        "description": "Semantic and keyword web search and page fetching via the Exa Search API.",
        "version": "3.4.2",
        "repository": {
          "url": "https://github.com/exa-labs/exa-mcp-server",
          "source": "github"
        },
        "websiteUrl": "https://exa.ai",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "exa-mcp-server",
            "version": "3.4.2",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Exa API key",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "EXA_API_KEY"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-2pqkOuXnABXrwVkB6VyMYA9ywr1aqjBGKlLtcgTBMkWtIn74yY+pMPn8Km2SAGfLeENfWaIHv1L7/kF0b+E5BQ==",
            "lockfile": {
              "sha512": "sha512-i2oqyPwLMBk7ffQ4hsfGjkxjONJm0o+vhvRj9MtsXI0cI80IBn843s47ksyvV7BNB17I+d1xxLWoaT5jxSLv7w==",
              "url": "https://forgeuno.com/api/v2/mcp/exa-mcp/3.4.2/package-lock.json"
            },
            "bin": "dist/stdio.cjs",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-10-21",
            "tier": "community"
          },
          "com.forgeuno/security": {
            "level": "safe",
            "permissions": [
              "read:web_search"
            ],
            "dataExposure": "metadata",
            "requiresSupervisor": false,
            "riskNotes": "Read-only web search and page fetching through the Exa API, which receives the queries and URLs. exa-mcp-server 3.4.2 always sends usage events (tool name, latency, success, session) to api.agnost.ai, with arguments, results and errors excluded; this cannot be turned off."
          },
          "com.forgeuno/capabilities": {
            "category": "search",
            "detailedDescription": "Enables AI agents to perform neural/semantic search queries through the Exa API via MCP. Supports both keyword and meaning-based search, returning highly relevant web content. Particularly useful for research tasks where traditional keyword search falls short.",
            "whenToUse": "When the agent needs to perform semantic or meaning-based web search for research and information gathering.",
            "whenNotToUse": "When exact keyword matching or local data search is needed.",
            "inputTypes": [
              "text"
            ],
            "outputTypes": [
              "text",
              "json"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://dashboard.exa.ai/api-keys",
            "hint": "Create an API key in the Exa dashboard."
          },
          "com.forgeuno/fields": {
            "EXA_API_KEY": {
              "label": "Exa API Key"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "Exa offers a free tier with limited queries; paid plans for higher volume."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": ">=20.0.0",
            "nativeModules": false,
            "startsWithoutCredentials": true,
            "credentials": "none",
            "installSizeBytes": 29616230,
            "tools": [
              {
                "name": "web_fetch_exa",
                "description": "Read a webpage's full content as clean markdown. Use after web_search_exa when highlights are insufficient or to read any URL.\n\nBest for: Extracting full content from known URLs. Batch multiple URLs in one call.\nReturns: Clean text content and metadata from the page(s).",
                "parameters": [
                  "maxCharacters",
                  "urls"
                ],
                "required": [
                  "urls"
                ],
                "inputSchemaSha256": "d72ee7687517df49ee4374713985811b9a87c252590b2ef26c9218786b0f805b"
              },
              {
                "name": "web_search_exa",
                "description": "Search the web for any topic and get clean, ready-to-use content.\n\n      Best for: Finding current information, news, facts, people, companies, or answering questions about any topic.\n      Returns: Clean text content from top search results.\n\n      Query tips:\n      describe the ideal page, not keywords. \"blog post comparing React and Vue performance\" not \"React vs Vue\".\n      Use category:people / category:company to search through Linkedin profiles / companies respectively.\n      If highlights are insufficient, follow up with web_fetch_exa on the best URLs.",
                "parameters": [
                  "numResults",
                  "query"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "83626e8602e25181df8d8d32d1ac71cdcbafec0abf0e4e8ebeb47f8e7cd8ca73"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "通过 Exa Search API 进行语义与关键词网页搜索，并抓取网页内容。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 使用 Exa API 进行神经/语义搜索。同时支持关键词搜索和基于含义的搜索，返回高度相关的网页内容，特别适合传统关键词搜索效果不佳的研究任务。",
                "whenToUse": "智能体需要进行语义或基于含义的网页搜索，用于研究和信息收集时。",
                "whenNotToUse": "需要精确关键词匹配或搜索本地数据时。"
              },
              "credentials": {
                "hint": "在 Exa 控制台创建 API 密钥。"
              },
              "fields": {
                "EXA_API_KEY": {
                  "label": "Exa API 密钥",
                  "description": "Exa 的 API 密钥"
                }
              },
              "security": {
                "riskNotes": "通过 Exa API 进行只读网页搜索和网页抓取，Exa 会收到查询和网址。exa-mcp-server 3.4.2 总会向 api.agnost.ai 发送使用事件（工具名、耗时、是否成功、会话），不含参数、结果和错误，且无法关闭。"
              },
              "pricing": {
                "notes": "Exa 提供次数有限的免费额度，更高用量需要付费套餐。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "exa-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "io.github.firecrawl/firecrawl-mcp-server",
        "title": "Firecrawl",
        "description": "Web scraping, crawling and search that turns pages into clean markdown via Firecrawl.",
        "version": "3.33.4",
        "repository": {
          "url": "https://github.com/firecrawl/firecrawl-mcp-server",
          "source": "github"
        },
        "websiteUrl": "https://www.firecrawl.dev",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "firecrawl-mcp",
            "version": "3.33.4",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Firecrawl API key",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "FIRECRAWL_API_KEY"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-A6FF9n5Tqwr014svYil+dp1tHJEYZl5bUVhdIF6aTMnM/zjNzyHq9iP2IJbh9aosgBmD+Ti86bGawPjGgslOSQ==",
            "lockfile": {
              "sha512": "sha512-Gicf8Zw5cdV5jMoQMLbqsQuMlgIjjYWyKFbQjVjC1E/mOrlwD0zWVgdNFIDBCgIvRF6FcqtLFWk/VyxhHT83Ng==",
              "url": "https://forgeuno.com/api/v2/mcp/firecrawl-mcp/3.33.4/package-lock.json"
            },
            "bin": "dist/index.js",
            "installScripts": {
              "allowed": [],
              "denied": [
                "tldjs@2.3.2"
              ]
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-10-21",
            "tier": "community"
          },
          "com.forgeuno/security": {
            "level": "caution",
            "permissions": [
              "read:web_content",
              "write:firecrawl_monitors",
              "interact:remote_browser"
            ],
            "dataExposure": "content",
            "requiresSupervisor": false,
            "riskNotes": "Scrapes, crawls and searches via the Firecrawl cloud, which receives the requested URLs, queries and page content. Version 3.x can also create, update and permanently delete scheduled monitors on the Firecrawl account (optionally with webhooks) and drive a live remote browser that clicks, fills forms or runs Bash/Python/Node code in Firecrawl's sandbox."
          },
          "com.forgeuno/capabilities": {
            "category": "content",
            "detailedDescription": "Enables AI agents to scrape and crawl websites through the Model Context Protocol using Firecrawl. Converts web pages into clean, LLM-friendly markdown format, handling JavaScript rendering, pagination, and anti-bot measures. Ideal for extracting structured content from websites at scale.",
            "whenToUse": "When the agent needs to scrape web pages and convert them to clean markdown for processing.",
            "whenNotToUse": "When the task must not send URLs or page content to the Firecrawl cloud, or when no change to Firecrawl monitors should be possible.",
            "inputTypes": [
              "url",
              "text"
            ],
            "outputTypes": [
              "text",
              "markdown",
              "json"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://www.firecrawl.dev/app/api-keys",
            "hint": "Sign up at Firecrawl and create an API key from the dashboard."
          },
          "com.forgeuno/fields": {
            "FIRECRAWL_API_KEY": {
              "label": "Firecrawl API Key"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "Firecrawl offers a free tier with limited pages; paid plans for higher volume."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": ">=22.0.0",
            "nativeModules": false,
            "startsWithoutCredentials": true,
            "credentials": "none",
            "installSizeBytes": 50636718,
            "tools": [
              {
                "name": "firecrawl_agent",
                "description": "\nRun web research that returns structured data when the URLs are not known or the answer spans several sites. Describe the fields you need in `prompt`, optionally pass a JSON `schema` and seed `urls`, and the research agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it to research an entity plus its fields (founders, pricing, contact details), to build lists and datasets (companies, people, products, jobs, papers), and for pages that need navigation or interaction to reach the data. Optional `effort` sets the reasoning budget, `maxCredits` caps spend, and `strictConstrainToURLs` keeps the agent to the supplied `urls`.\n\nThis call returns only a job ID, not the research result. Read the job with `firecrawl_agent_status` until it reaches `completed` or `failed`; a typical research run takes one to three minutes. For one known URL use `firecrawl_scrape` (with formats: [\"json\"] for structured output); for a plain lookup that a results page answers, use `firecrawl_search`.\n\nThe job also returns a `threadId`. To continue that thread, pass it with a follow-up `prompt`; omitted `mode`, `urls`, `schema` and exchange settings carry over from the previous turn.\n\nThe agent only calls Alexandria providers whose terms the team has accepted. `exchange.skippedProviders` lists gated providers. With `exchange.onTermsRequired` \"ask\", a terms `pendingApproval` and `exchange.requiresAction` carry the `approvalId` and provider requirements. Read terms/show through `firecrawl_scrape`. An organization admin must accept terms in the Firecrawl dashboard at the provider URL or https://www.firecrawl.dev/app/settings?tab=data-sources. Ignore any terms/accept call in the API response. Only after the admin confirms acceptance, resume with the same `threadId` and `exchange.approve: {approvalId}`; this does not accept terms. To decline, use `exchange.decline: {approvalId}`. Never infer acceptance from a data request.\n",
                "parameters": [
                  "effort",
                  "exchange",
                  "maxCredits",
                  "mode",
                  "prompt",
                  "schema",
                  "strictConstrainToURLs",
                  "threadId",
                  "urls"
                ],
                "required": [
                  "prompt"
                ],
                "inputSchemaSha256": "4a5bc1211db9b3db2d3e14b87779c9b6709b7e50fec57e1fd7b3046e3def54b9"
              },
              {
                "name": "firecrawl_agent_status",
                "description": "\nRetrieve progress or final results for a `firecrawl_agent` job ID. A `processing` response is non-terminal and does not contain the final research result. Check again after 15–30 seconds until the status is `completed` or `failed`; a typical research run takes one to three minutes and complex jobs can take longer. If the job cannot finish within the task's available time, use `firecrawl_search` and `firecrawl_scrape` to complete the requested output.\n\nReturns job status, progress information, and result data when completed.\n",
                "parameters": [
                  "id"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
              },
              {
                "name": "firecrawl_check_crawl_status",
                "description": "\nRetrieve the current status, progress, and available results for an existing crawl ID. This only reads Firecrawl job state and does not start or modify the crawl.\n",
                "parameters": [
                  "id"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
              },
              {
                "name": "firecrawl_crawl",
                "description": "\nStart a multi-page crawl at a website URL, poll it to a terminal state, and return the final status and collected data. Scope can be bounded with include/exclude paths, depth, page limit, subdomain/external-link controls, sitemap handling, delay, and scrape options.\n\nCrawl results can be large; use conservative limits when full-site coverage is unnecessary. Webhooks and interactive scrape actions are unavailable in safe mode. Returns the crawl ID, status, and page data.\n",
                "parameters": [
                  "allowExternalLinks",
                  "allowSubdomains",
                  "crawlEntireDomain",
                  "deduplicateSimilarURLs",
                  "delay",
                  "excludePaths",
                  "ignoreQueryParameters",
                  "includePaths",
                  "limit",
                  "maxConcurrency",
                  "maxDiscoveryDepth",
                  "prompt",
                  "scrapeOptions",
                  "sitemap",
                  "url",
                  "webhook",
                  "webhookHeaders"
                ],
                "required": [
                  "url"
                ],
                "inputSchemaSha256": "34c5060ceb96d8a993b8eb64c0075b99466d415c482b5dc6e01753dbaaa800a5"
              },
              {
                "name": "firecrawl_credit_usage",
                "description": "\nGet the authenticated Firecrawl team's current credit balance or historical credit consumption. Use the current view to answer how many credits remain or to check billing-period boundaries. Use the historical view for monthly usage reporting and trend analysis.\n\nThe current view returns `remainingCredits`, `planCredits`, `billingPeriodStart`, and `billingPeriodEnd`. Extra purchased or granted credits can make `remainingCredits` greater than `planCredits`. Billing-period dates may be null when the upstream billing provider has no period metadata.\n\nThe historical view returns periods sorted by start date with `startDate`, `endDate`, and `creditsUsed`. Set `byApiKey` to include separate periods per API key, identified by the optional `apiKey` field. The newest period's `endDate` can be null.\n",
                "parameters": [
                  "byApiKey",
                  "view"
                ],
                "required": [],
                "inputSchemaSha256": "2e851deaf071644f32ef0976d27aa0179d515585fc21b226532734e7c4fb370e"
              },
              {
                "name": "firecrawl_developer_search",
                "description": "\nSearch an index of public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation for programming questions that need external documentation or upstream evidence.\n\nReturns ranked results with an ID, source type, URL, title, and the matched passages in markdown.\n",
                "parameters": [
                  "k",
                  "query",
                  "skills"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "62a604e0889b0d0101c630eb13b764957f9883b5e128129580ba5515d66dbc1e"
              },
              {
                "name": "firecrawl_find_tools",
                "description": "Browse Alexandria data providers and workflows or read a selected contract. Alexandria covers companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more: typed, sourced records through published contracts. Prefer normal firecrawl_search for a data task; it already returns matching providers. Use this tool when the contract you need was not returned in full, to browse a category when search found nothing, or before scraping the same fields from several pages. Discovery is free. Use query for semantic discovery or urls to find providers for a website. With no arguments, browse categories, then providers and tools. Contracts describe the inputs and outputs for execution through firecrawl_scrape. nextTool identifies further discovery or pagination. Discovery does not execute providers. Use firecrawl_search when you also need web results.",
                "parameters": [
                  "capabilities",
                  "categories",
                  "expand",
                  "groups",
                  "includeCosts",
                  "level",
                  "limit",
                  "offset",
                  "providers",
                  "query",
                  "urls"
                ],
                "required": [],
                "inputSchemaSha256": "75cc3364f05fa1adedb33bf94e835f6b3d30dead634acf7acd883841c317e348"
              },
              {
                "name": "firecrawl_gov_search",
                "description": "\nSearch US federal, state, and local statutes, regulations, codes, court opinions, and other government publications for legal or regulatory questions that need primary text. Clarify a missing jurisdiction or ambiguous as-of date before identifying the governing rule.\n\nReturns ranked results with a position, title, URL, and matched snippet. Results may include historical versions, bill text, agency guidance, and third-party reproductions. Verify the issuer, jurisdiction, enacted/effective status, and version before citing current governing law. Read a known URL or additional page context with firecrawl_scrape. Use general search for non-US questions or missing coverage; no hits does not establish that no applicable law exists.\n",
                "parameters": [
                  "k",
                  "query"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "46292b0ed327d4429233b1d8bb4018ad6daa6d1e74894b8730b63a55e9c9d749"
              },
              {
                "name": "firecrawl_interact",
                "description": "\nOpen or reuse a live browser session to navigate a page, click controls, fill fields, or run browser code. Provide either `url` or `scrapeId`, and either a natural-language `prompt` or executable `code`; code can run as Bash, Python, or Node with a bounded timeout.\n\nThis acts on the live site, so actions such as form submission can create persistent external side effects. Returns execution output, stdout/stderr, exit status, and session viewing URLs.\n",
                "parameters": [
                  "code",
                  "language",
                  "prompt",
                  "scrapeId",
                  "scrapeOptions",
                  "timeout",
                  "url"
                ],
                "required": [],
                "inputSchemaSha256": "f5adeb8a995513ad800b476c1a513c679866793c2ab94bd250cb10f79dc1426b"
              },
              {
                "name": "firecrawl_interact_stop",
                "description": "\nStop the live interact session associated with a `scrapeId` and release its resources. Returns a success confirmation.\n",
                "parameters": [
                  "scrapeId"
                ],
                "required": [
                  "scrapeId"
                ],
                "inputSchemaSha256": "78bd4914685cfa909301ca290743e6e2857d732047c4bf6f1448ed950ff317bd"
              },
              {
                "name": "firecrawl_map",
                "description": "\nEnumerate URLs indexed under one website through Firecrawl without fetching each page's content. Use this when the request asks for a site's URL inventory, when several relevant pages must be located, or when the desired page URL is unknown. An optional `search` term narrows the URL list, while sitemap, subdomain, query-parameter, and result-limit options control coverage.\n\nReturns matching URLs rather than page bodies. Retrieve one page with `firecrawl_scrape`; collect content across multiple pages with `firecrawl_crawl`. Authenticated responses can include an `id` for optional map feedback.\n",
                "parameters": [
                  "ignoreQueryParameters",
                  "includeSubdomains",
                  "limit",
                  "search",
                  "sitemap",
                  "url"
                ],
                "required": [
                  "url"
                ],
                "inputSchemaSha256": "2567ab0c41f46d57dedb8d2d4fcdd52fbf7265c0f88fc8f45f720737194d975c"
              },
              {
                "name": "firecrawl_monitor_check",
                "description": "\nRetrieve one monitor check and its page-level results, optionally filtered by page status. Pages report `same`, `new`, `changed`, `removed`, or `error`; configured goal judging can add a meaningful-change decision.\n\nMarkdown tracking returns a unified text diff, JSON tracking returns field paths with previous/current values and a current snapshot, and mixed tracking returns both. Returns one page of results plus a `next` URL when more pages exist.\n",
                "parameters": [
                  "checkId",
                  "id",
                  "limit",
                  "pageStatus",
                  "skip"
                ],
                "required": [
                  "checkId",
                  "id"
                ],
                "inputSchemaSha256": "1ca031848ed5baa83c2c95bdd6e67562f245ed5d16ac7f6a12ea6466562eaa15"
              },
              {
                "name": "firecrawl_monitor_checks",
                "description": "\nList historical checks for a monitor, optionally filtered by status and bounded by a result limit. Returns one page of check summaries and pagination metadata.\n",
                "parameters": [
                  "id",
                  "limit",
                  "offset",
                  "status"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "4114f98da5cf8d63254924a52a27d323e9a4ffdce16db8bf9e23634a97569384"
              },
              {
                "name": "firecrawl_monitor_create",
                "description": "\nCreate a recurring scrape, crawl, or search monitor that compares each check with its retained predecessor. The simple form accepts `page`/`pages` or `queries` plus a plain-language `goal`; the advanced `body` form controls targets, schedule, change-tracking formats, judging, retention, webhook, and notifications.\n\nIn the simple form, a `goal` is required. If `queries` contains one or more non-empty values and is supplied with `page`/`pages`, `queries` create the search target and page targets are ignored. A monitor schedules future network checks and can send configured email or webhook notifications. Returns the created monitor.\n",
                "parameters": [
                  "body",
                  "email",
                  "excludeDomains",
                  "goal",
                  "includeDiffs",
                  "includeDomains",
                  "maxResults",
                  "name",
                  "page",
                  "pages",
                  "queries",
                  "scheduleText",
                  "searchWindow",
                  "timezone",
                  "webhookUrl"
                ],
                "required": [],
                "inputSchemaSha256": "e312d35b3e563a0e539b75a4e55db4a744a65c23953218fcff9185400dc770fd"
              },
              {
                "name": "firecrawl_monitor_delete",
                "description": "\nPermanently delete a monitor by ID and stop its future schedule. This operation cannot be undone and returns deletion status.\n",
                "parameters": [
                  "id"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
              },
              {
                "name": "firecrawl_monitor_get",
                "description": "\nRetrieve one monitor by ID, including its configuration and current state. This does not run or modify the monitor.\n",
                "parameters": [
                  "id"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
              },
              {
                "name": "firecrawl_monitor_list",
                "description": "\nList monitors for the authenticated account with optional pagination controls. Returns one page of monitor records and pagination metadata.\n",
                "parameters": [
                  "limit",
                  "offset"
                ],
                "required": [],
                "inputSchemaSha256": "d61195a5101615e09d291ef6b5c1d0fb04107c8f6c0e724597813995a33181ab"
              },
              {
                "name": "firecrawl_monitor_run",
                "description": "\nQueue an immediate check for a monitor outside its normal schedule. This starts network work for the monitor's configured targets and returns the queued check.\n",
                "parameters": [
                  "id"
                ],
                "required": [
                  "id"
                ],
                "inputSchemaSha256": "69a5fdeb0408ddbd949e8c6d039848f1b5bd2369f13cbf6033d319ac15317389"
              },
              {
                "name": "firecrawl_monitor_update",
                "description": "\nPatch an existing monitor by ID. The body can change its name, active/paused status, schedule, targets, goal, judging, webhook, notifications, or retention; these changes affect future scheduled checks.\n\nReturns the updated monitor.\n",
                "parameters": [
                  "body",
                  "id"
                ],
                "required": [
                  "body",
                  "id"
                ],
                "inputSchemaSha256": "5250b9bc6a5af07ab2067956052946583098f0f9f16664c4ac087650487cda5e"
              },
              {
                "name": "firecrawl_parse",
                "description": "\nParse one supported document into markdown, HTML, links, summary, targeted answers, or JSON matching a schema. Supported inputs include common HTML, PDF, Word, RTF, OpenDocument, and spreadsheet files; PDF parsing can be bounded with `pdfOptions.maxPages`.\n\nLocal MCP reads `filePath` from the server filesystem. Hosted MCP uses two calls: first provide `filePath` to receive upload instructions, upload locally, then call again with the returned `uploadRef`; do not send both fields together. Remote web URLs belong in `firecrawl_scrape`.\n\nSet `redactPII` to request redaction of personally identifiable information in the returned content. `zeroDataRetention` requires an eligible authenticated account; omit it for anonymous keyless use. Returns upload instructions for hosted phase one or parsed document content for the final call. Authenticated final responses can include a `data.metadata.scrapeId` for optional parse feedback.\n",
                "parameters": [
                  "contentType",
                  "excludeTags",
                  "filePath",
                  "formats",
                  "includeTags",
                  "jsonOptions",
                  "maxAge",
                  "onlyMainContent",
                  "parsers",
                  "pdfOptions",
                  "proxy",
                  "queryOptions",
                  "redactPII",
                  "removeBase64Images",
                  "skipTlsVerification",
                  "storeInCache",
                  "zeroDataRetention"
                ],
                "required": [
                  "filePath"
                ],
                "inputSchemaSha256": "3910695cf0f51496de20d0a9effb89b37d48fb329a5634039f8a3eeda9560484"
              },
              {
                "name": "firecrawl_research_inspect_paper",
                "description": "\nRetrieve canonical metadata for one paper ID, such as an arXiv, PMC, PMID, or DOI identifier. Returns the title, abstract, authors, categories, source IDs, and dates as markdown.\n",
                "parameters": [
                  "paperId"
                ],
                "required": [
                  "paperId"
                ],
                "inputSchemaSha256": "cda683e75fd95b3d2ff3cbe439c7f0bb6f7fc6cf90fec1276510438215f4d897"
              },
              {
                "name": "firecrawl_research_read_paper",
                "description": "\nRetrieve in-body passages from one paper that are relevant to a specific question. Full text is available only for indexed papers; `k` controls the number of passages.\n\nReturns matching passages or a notice when full text is unavailable.\n",
                "parameters": [
                  "k",
                  "paperId",
                  "question"
                ],
                "required": [
                  "paperId",
                  "question"
                ],
                "inputSchemaSha256": "baba062e943629ad78ed0827ceacde496fe674329de63b83acf3c6e9edbdfed1"
              },
              {
                "name": "firecrawl_research_related_papers",
                "description": "\nFind citation-graph candidates from one to ten `seed_ids`; the first ID is the primary seed and later IDs are anchors. `mode` defaults to `similar` (co-citation/bibliographic coupling); `citers` returns papers citing a seed and `references` papers cited by a seed. `intent` ranks candidates.\n\nReturns ranked candidates and the evaluated pool size.\n",
                "parameters": [
                  "intent",
                  "k",
                  "mode",
                  "rerank",
                  "seed_ids"
                ],
                "required": [
                  "intent",
                  "seed_ids"
                ],
                "inputSchemaSha256": "acbc14ac5abc30f6ef505f1a6c02fb7180bcbbcae116908a47868c75c5350e1b"
              },
              {
                "name": "firecrawl_research_search_papers",
                "description": "\nSearch paper metadata and abstracts with a natural-language query across the indexed corpus, which spans biomedical, life-science, and clinical literature (PubMed, bioRxiv, medRxiv) alongside arXiv and other scientific sources. Optional author, category, and date filters constrain results.\n\nSeveral distinct framings of the same question surface different papers than a single query does.\n\nReturns ranked papers with canonical IDs, titles, authors, and abstracts.\n",
                "parameters": [
                  "authors",
                  "categories",
                  "from",
                  "k",
                  "query",
                  "to"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "33680104c1e89e04401a743cba68c4bf73823b082f2b70550c51b6ee197129c6"
              },
              {
                "name": "firecrawl_scrape",
                "description": "\nScrape one URL and return its content: markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema. Use it when the request identifies a page and needs its content or defined fields: the user gives a URL or names a page or PDF and wants it read or summarized, or wants prices, specs, contact details or a table from it. Use `firecrawl_search` when additional web sources are needed; on an authenticated session, `firecrawl_map` lists a site's URLs and `firecrawl_crawl` collects a set of pages.\n\nFirecrawl may serve recently indexed content; set `maxAge: 0` for a live fetch or a smaller `maxAge` to bound staleness. A successful response does not by itself confirm the page is still current. Browser actions can change the live page when interactive actions are enabled. Authenticated responses can include a `metadata.scrapeId` for optional scrape feedback.\n\n`firecrawl_search` and `firecrawl_find_tools` can discover providers for the same fields across several pages; a matching provider returns typed records in one call.\n\nWith `alexandria` in place of `url`, the tool runs catalogued provider capabilities instead of fetching a page. Provider discovery and execution require an API key on a team with Alexandria enabled.\n",
                "parameters": [
                  "actions",
                  "alexandria",
                  "domainTools",
                  "excludeTags",
                  "formats",
                  "includeTags",
                  "jsonOptions",
                  "location",
                  "lockdown",
                  "maxAge",
                  "mobile",
                  "onlyMainContent",
                  "parsers",
                  "pdfOptions",
                  "profile",
                  "proxy",
                  "queryOptions",
                  "redactPII",
                  "removeBase64Images",
                  "requestId",
                  "screenshotOptions",
                  "skipTlsVerification",
                  "storeInCache",
                  "timeout",
                  "toolDetail",
                  "url",
                  "waitFor",
                  "zeroDataRetention"
                ],
                "required": [],
                "inputSchemaSha256": "97d63fd937e908bc25a7a40ccf09d7e451ce574901d3ab003e89a667cebbe6eb"
              },
              {
                "name": "firecrawl_search",
                "description": "\nSearch web, news, or image sources and return ranked results with query-relevant highlights. Use it for current information, or to list businesses, people, products, jobs or events with websites, prices or contacts. Each web result is a title, URL, and description; use `firecrawl_scrape` on a result URL when the excerpt is not enough.\n\nAuthenticated search also returns matching Alexandria data providers in data.tools (companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more). Prefer a provider over scraping pages when the task needs the same fields across several entities, exact figures or timestamps, provenance, or many records; use web results when they already answer the question. Authenticated searches always add alexandria to the sources, so sources: [\"web\"] also returns providers; domainTools: false turns off website-matched tools only.\n\nOn an authenticated session, tool matches describe available capabilities; `firecrawl_find_tools` returns their contracts and `firecrawl_scrape` with an `alexandria` body executes a selected capability. Keyless sessions get no Alexandria matches in data.tools.\n\nFor a programming question, add `categories: [\"developer\"]`; its hits return in `data.web` with `category: \"developer\"`. For a legal or regulatory question, `categories: [\"gov\"]` returns hits in `data.web` with `category: \"gov\"` and cannot be combined with other categories; authenticated sessions also have `firecrawl_gov_search` as the dedicated tool. Verify gov results' issuer, jurisdiction, status, and version before citing current law. `categories: [\"research\"]` restricts web results to research-affiliated websites; the `firecrawl_research_*` tools are a separate surface over paper abstracts and full text (PubMed, bioRxiv, medRxiv, arXiv). Returns source-type result groups and usage metadata. Authenticated responses can include an `id` for optional search feedback.\n",
                "parameters": [
                  "categories",
                  "domainTools",
                  "enterprise",
                  "excludeDomains",
                  "filter",
                  "highlights",
                  "includeDomains",
                  "limit",
                  "location",
                  "query",
                  "scrapeOptions",
                  "sources",
                  "tbs",
                  "toolDetail"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "ede4250a5536281fe550afed4653ef0e3c104f1f0d2fbcc19f079e1668bdc871"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "通过 Firecrawl 抓取、爬取和搜索网页，并转换为干净的 Markdown。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 使用 Firecrawl 抓取和爬取网站，把网页转换为干净、适合大模型处理的 Markdown，并处理 JavaScript 渲染、分页和反爬措施，适合大规模提取网站的结构化内容。",
                "whenToUse": "智能体需要抓取网页并转换为干净的 Markdown 以便处理时。",
                "whenNotToUse": "任务不允许把网址或网页内容发送到 Firecrawl 云服务，或不应允许修改 Firecrawl 监控任务时。"
              },
              "credentials": {
                "hint": "注册 Firecrawl 并在控制台创建 API 密钥。"
              },
              "fields": {
                "FIRECRAWL_API_KEY": {
                  "label": "Firecrawl API 密钥",
                  "description": "Firecrawl 的 API 密钥"
                }
              },
              "security": {
                "riskNotes": "通过 Firecrawl 云服务抓取、爬取和搜索，Firecrawl 会收到所请求的网址、查询和网页内容。3.x 版本还可以在 Firecrawl 账户中创建、更新和永久删除定时监控任务（可附 Webhook），并操作远程浏览器点击、填写表单，或在 Firecrawl 沙箱中运行 Bash/Python/Node 代码。"
              },
              "pricing": {
                "notes": "Firecrawl 提供页面数有限的免费额度，更高用量需要付费套餐。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "firecrawl-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "com.forgeuno/hubspot-mcp",
        "title": "HubSpot",
        "description": "Read and update HubSpot CRM contacts, companies, deals and tickets.",
        "version": "0.4.0",
        "repository": {
          "url": "https://github.com/HubSpot/mcp-server",
          "source": "github"
        },
        "websiteUrl": "https://developers.hubspot.com/mcp",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "@hubspot/mcp-server",
            "version": "0.4.0",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Access token of a HubSpot private app",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "PRIVATE_APP_ACCESS_TOKEN"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-nNNrqysJrCkPb8XWl3wd2d61nTLf8IAnfWOHag4FCSRKRjSXuIE/2h4GVUcPmVhJVaN7RsIq8C43BMFV+EI9GA==",
            "lockfile": {
              "sha512": "sha512-3seNHmlBpH8APD3huB/WPXmUAqPIipKAf1gkZVLDER/oPBf/TFYCc2LgCuIRosP1ytfUWuWA8sKepsZv0NegzQ==",
              "url": "https://forgeuno.com/api/v2/mcp/hubspot-mcp/0.4.0/package-lock.json"
            },
            "bin": "dist/index.js",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-03-16",
            "tier": "official"
          },
          "com.forgeuno/security": {
            "level": "caution",
            "permissions": [
              "read:crm",
              "write:crm",
              "read:contacts",
              "write:contacts"
            ],
            "dataExposure": "content",
            "requiresSupervisor": false,
            "riskNotes": "Grants access to CRM records including contact PII. Use a scoped private app token with minimum required permissions."
          },
          "com.forgeuno/capabilities": {
            "category": "productivity",
            "detailedDescription": "Enables AI agents to read and update HubSpot CRM data through the Model Context Protocol. Supports contact and company lookup, deal pipeline management, ticket creation, and note logging. Ideal for sales automation, lead enrichment, and customer support workflows that use HubSpot as the system of record.",
            "whenToUse": "When agents need to enrich leads, update CRM records, log sales activities, or create support tickets in HubSpot.",
            "whenNotToUse": "For CRM workflows that are not based on HubSpot, such as Salesforce.",
            "inputTypes": [
              "text",
              "json"
            ],
            "outputTypes": [
              "json",
              "text"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://app.hubspot.com/private-apps",
            "hint": "Create a Private App in HubSpot and copy the access token with the minimum required scopes."
          },
          "com.forgeuno/fields": {
            "PRIVATE_APP_ACCESS_TOKEN": {
              "label": "HubSpot Private App Access Token"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "HubSpot CRM is free; API access available on all plans including free."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": null,
            "nativeModules": false,
            "startsWithoutCredentials": false,
            "credentials": "placeholder",
            "installSizeBytes": 14941206,
            "tools": [
              {
                "name": "hubspot-batch-create-associations",
                "description": "\n    🛡️ Guardrails:\n      1.  Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Establishes relationships between HubSpot objects, linking records across different object types, by creating associations between objects in batch.\n      2. Uses a single set of association types for all associations in the batch.\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the OwnerId and UserId if you don't have that already.\n      2. Use the hubspot-get-association-definitions tool to identify valid association types before creating associations.\n  ",
                "parameters": [
                  "fromObjectType",
                  "inputs",
                  "toObjectType",
                  "types"
                ],
                "required": [
                  "fromObjectType",
                  "inputs",
                  "toObjectType",
                  "types"
                ],
                "inputSchemaSha256": "a00e082079f3ddf5d1d30fc2aab2823477cb9bfe5d738e87a43532d3d5c1f0f5"
              },
              {
                "name": "hubspot-batch-create-objects",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Creates multiple HubSpot objects of the same objectType in a single API call, optimizing for bulk operations.\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the OwnerId and UserId if you don't have that already.\n      2. Use the hubspot-list-objects tool to sample existing objects for the object type.\n      3. Use the hubspot-get-association-definitions tool to identify valid association types before creating associations.\n  ",
                "parameters": [
                  "inputs",
                  "objectType"
                ],
                "required": [
                  "inputs",
                  "objectType"
                ],
                "inputSchemaSha256": "f3d4022f41a1e6cded961ae388f5c19ff92878234a58376fd46d71fbe756ef0f"
              },
              {
                "name": "hubspot-batch-read-objects",
                "description": "\n    🎯 Purpose:\n      1. Retrieves multiple HubSpot objects of the same object type by their IDs in a single batch operation.\n\n    🧭 Usage Guidance:\n      1. Use this tool to retrieve objects when the object IDs are known.\n  ",
                "parameters": [
                  "inputs",
                  "objectType",
                  "properties",
                  "propertiesWithHistory"
                ],
                "required": [
                  "inputs",
                  "objectType"
                ],
                "inputSchemaSha256": "f0ea32b2ae446e9333044d9a4a0248dd0a690a41a487fc4bc669839927ee5dad"
              },
              {
                "name": "hubspot-batch-update-objects",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Updates multiple existing HubSpot objects of the same objectType in a single API call.\n      2. Use this tool when the user wants to update one or more existing CRM objects.\n      3. If you are unsure about the property type to update, identify existing properties of the object and ask the user.\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the OwnerId and UserId if you don't have that already.\n      2. Use the hubspot-list-objects tool to sample existing objects for the object type.\n      3. If hubspot-list-objects tool's response isn't helpful, use hubspot-list-properties tool.\n  ",
                "parameters": [
                  "inputs",
                  "objectType"
                ],
                "required": [
                  "inputs",
                  "objectType"
                ],
                "inputSchemaSha256": "537b59ec58ff53dc6a37eba0bef36ab2d10bc063bbd778da6c8ff97c2a6b8927"
              },
              {
                "name": "hubspot-create-engagement",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Creates a HubSpot engagement (Note or Task) associated with contacts, companies, deals, or tickets.\n      2. This endpoint is useful for keeping your CRM records up-to-date on any interactions that take place outside of HubSpot.\n      3. Activity reporting in the CRM also feeds off of this data.\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the OwnerId and UserId.\n\n    🧭 Usage Guidance:\n      1. Use NOTE type for adding notes to records\n      2. Use TASK type for creating tasks with subject, status, and assignment\n      3. Both require relevant associations to connect them to CRM records\n      4. Other types of engagements (EMAIL, CALL, MEETING) are NOT supported yet.\n      5. HubSpot notes and task descriptions support HTML formatting. However headings (<h1>, <h2>, etc.) look ugly in the CRM. So use them sparingly.\n  ",
                "parameters": [
                  "associations",
                  "metadata",
                  "ownerId",
                  "timestamp",
                  "type"
                ],
                "required": [
                  "associations",
                  "metadata",
                  "ownerId",
                  "type"
                ],
                "inputSchemaSha256": "1e94f3436191886008dde0a61f25cb617e0247c9c647600d11cab1ae64937b88"
              },
              {
                "name": "hubspot-create-property",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Creates new custom properties for HubSpot object types, enabling data structure customization.\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the OwnerId and UserId if you don't have that already.\n      2. Use the hubspot-list-objects tool to sample existing objects for the object type.\n      3. If hubspot-list-objects tool's response isn't helpful, use hubspot-list-properties tool.\n\n    🧭 Usage Guidance:\n      1. Use this tool when you need to create a new custom property for a HubSpot object type.\n      2. Makes sure that the user is looking to create a new property, and not create an object of a specific object type.\n      3. Use list-properties to get a list of all properties for a given object type to be sure that the property does not already exist.\n      4. Use list-properties to to understand the data structure of object properties first.\n  ",
                "parameters": [
                  "calculationFormula",
                  "description",
                  "displayOrder",
                  "externalOptions",
                  "fieldType",
                  "formField",
                  "groupName",
                  "hasUniqueValue",
                  "hidden",
                  "label",
                  "name",
                  "objectType",
                  "options",
                  "type"
                ],
                "required": [
                  "groupName",
                  "label",
                  "name",
                  "objectType"
                ],
                "inputSchemaSha256": "6dd17d944df30632c252719c49a87d6349d9159f2bf4dd1a6197092d7f37bd0e"
              },
              {
                "name": "hubspot-generate-feedback-link",
                "description": "\n    🎯 Purpose:\n      1. Use this tool when the user wants to submit feedback about HubSpot MCP tool.\n      2. Use this tool proactively when the other HubSpot MCP tools are unable to solve the user's tasks effectively.\n      3. Use this tool when you sense dissatisfaction from the user using HubSpot MCP tools.\n      4. Feedback will help us improve the HubSpot MCP tools in future iterations.\n  ",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "f973399805c1c233633f5196cf8e2ad40ee100b94996d711dcd030813b671bc5"
              },
              {
                "name": "hubspot-get-association-definitions",
                "description": "\n    🎯 Purpose:\n      1. Retrieves valid association types between specific HubSpot object types.\n\n    📦 Returns:\n      1. Array of valid association definitions with type IDs, labels, and categories.\n\n    🧭 Usage Guidance:\n      1. Always use before creating associations to ensure valid relationship types or to help troubleshoot association creation errors.\n  ",
                "parameters": [
                  "fromObjectType",
                  "toObjectType"
                ],
                "required": [
                  "fromObjectType",
                  "toObjectType"
                ],
                "inputSchemaSha256": "e107296068b769344afdc2edb90e08c2e09d6f3057430170a25719a730e15922"
              },
              {
                "name": "hubspot-get-engagement",
                "description": "\n    🎯 Purpose:\n      1. Retrieves a HubSpot engagement by ID.\n  ",
                "parameters": [
                  "engagementId"
                ],
                "required": [
                  "engagementId"
                ],
                "inputSchemaSha256": "889dd0933e450216e85a4791ab423114113da04867dd0df6e5239b0d2b984cf1"
              },
              {
                "name": "hubspot-get-link",
                "description": "\n    🎯 Purpose:\n      1. Generates HubSpot UI links for different pages based on object types and IDs.\n      2. Supports both index pages (lists of objects) and record pages (specific object details).\n\n    📋 Prerequisites:\n      1. Use the hubspot-get-user-details tool to get the PortalId and UiDomain.\n\n    🧭 Usage Guidance:\n      1. Use to generate links to HubSpot UI pages when users need to reference specific HubSpot records.\n      2. Validates that object type IDs exist in the HubSpot system.\n  ",
                "parameters": [
                  "pageRequests",
                  "portalId",
                  "uiDomain"
                ],
                "required": [
                  "pageRequests",
                  "portalId",
                  "uiDomain"
                ],
                "inputSchemaSha256": "cbc89f3a39cb9c94b422c0604922bb53511408b37b72711be3627ea6c9d7b594"
              },
              {
                "name": "hubspot-get-property",
                "description": "\n    🎯 Purpose:\n      1. This tool retrieves detailed information about a specific property for a HubSpot object type.\n      2. You can use this to get all metadata related to a property, including its type, options,\n         and other configuration details.\n  ",
                "parameters": [
                  "objectType",
                  "propertyName"
                ],
                "required": [
                  "objectType",
                  "propertyName"
                ],
                "inputSchemaSha256": "83cee800e4ff6f0505a1c7685634203aa610bb7645cc118729a1a46353a0f919"
              },
              {
                "name": "hubspot-get-schemas",
                "description": "\n    🎯 Purpose:\n      1. Retrieves all custom object schemas defined in the HubSpot account.\n\n    🧭 Usage Guidance:\n      1. Before working with custom objects to understand available object types,\n         their properties, and associations.\n\n    📦 Returns:\n      1. Provides the objectTypeId and objectType for each schema.\n      2. These attributes should be used for this object type instead of \"custom\" in subsequent requests.\n  ",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "f973399805c1c233633f5196cf8e2ad40ee100b94996d711dcd030813b671bc5"
              },
              {
                "name": "hubspot-get-user-details",
                "description": "\n    🎯 Purpose\n      1. Authenticates and analyzes the current HubSpot access token, providing context about the user's permissions and account details.\n\n    🧭 Usage Guidance:\n      1. This tool must be used before performing any operations with Hubspot tools to determine the identity of the user, and permissions they have on their Hubspot account.\n\n    📦 Returns:\n      1. User ID, Hub ID, App ID, token type, a comprehensive list of authorized API scopes, and detailed owner information, and account information.\n      2. The uiDomain and hubId can be used to construct URLs to the HubSpot UI for the user.\n      3. If the user is an owner, the ownerId will help identify objects that are owned by the user.\n  ",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "f973399805c1c233633f5196cf8e2ad40ee100b94996d711dcd030813b671bc5"
              },
              {
                "name": "hubspot-get-workflow",
                "description": "\n    🎯 Purpose:\n      1. This tool retrieves detailed information about a specific workflow from the HubSpot account.\n\n    🧭 Usage Guidance:\n      1. Use the \"flowId\" parameter to specify which workflow to retrieve.\n      2. This endpoint returns complete workflow information including actions, enrollment criteria, and scheduling.\n      3. Use the hubspot-list-workflows tool first to identify the workflow ID you need.\n  ",
                "parameters": [
                  "flowId"
                ],
                "required": [
                  "flowId"
                ],
                "inputSchemaSha256": "71407239aee4c4e3cd94b8a6a6afdfd2d64faa4a860e55b60066abe2dcf18114"
              },
              {
                "name": "hubspot-list-associations",
                "description": "\n    🎯 Purpose:\n      1. Retrieves existing relationships between a specific object and other objects of a particular type.\n      2. For example, you can find all companies that a contact is associated with, all deals related to a company, or discover which customers have an open ticket.\n\n    📦 Returns:\n      1. Collection of associated object IDs and relationship metadata.\n      2. Use hubspot-batch-read-objects to get more information about the associated objects.\n\n    🧭 Usage Guidance:\n      1. Use this tool when mapping relationships between different HubSpot objects to understand your data's connections.\n      2. This tool is ideal when you already know a specific record's ID and need to discover its relationships with other object types.\n      3. Prefer this over hubspot-search-objects tool when exploring established connections rather than filtering by properties or criteria.\n  ",
                "parameters": [
                  "after",
                  "objectId",
                  "objectType",
                  "toObjectType"
                ],
                "required": [
                  "objectId",
                  "objectType",
                  "toObjectType"
                ],
                "inputSchemaSha256": "b1b76a165fc09c31a14fd99edd1b5ed56ec265bf690e22c26a813ab22e2ba92c"
              },
              {
                "name": "hubspot-list-objects",
                "description": "\n    🎯 Purpose:\n      1. Retrieves a paginated list of objects of a specified type from HubSpot.\n\n    📦 Returns:\n      1. Collection of objects with their properties and metadata, plus pagination information.\n\n    🧭 Usage Guidance:\n      1. Use for initial data exploration to understand the data structure of a HubSpot object type.\n      2. Helps list objects when the search criteria or filter criteria is not clear.\n      3. Use hubspot-search-objects for targeted queries when the data structure is known.\n      4. Use hubspot-batch-read-objects to retrieve specific objects by their IDs.\n      5. Use hubspot-list-associations to list associations between objects.\n  ",
                "parameters": [
                  "after",
                  "archived",
                  "associations",
                  "limit",
                  "objectType",
                  "properties"
                ],
                "required": [
                  "objectType"
                ],
                "inputSchemaSha256": "004e7ee4b8b027a276b71af9632d5b8039a120f56d962d506ad835183f537837"
              },
              {
                "name": "hubspot-list-properties",
                "description": "\n    🎯 Purpose:\n      1. This tool retrieves a complete catalog of properties for any HubSpot object type.\n\n    🧭 Usage Guidance:\n      1. This API has a large response that can consume a lot of tokens. Use the hubspot-list-objects tool to sample existing objects for the object type first.\n      2. Try to use the hubspot-get-property tool to get a specific property.\n      3. Use at the beginning of workflows to understand available data structures.\n  ",
                "parameters": [
                  "archived",
                  "includeHidden",
                  "objectType"
                ],
                "required": [
                  "objectType"
                ],
                "inputSchemaSha256": "a6284f971355464681a804ebef571daefeed46a64dcd3a279576f53827618a4b"
              },
              {
                "name": "hubspot-list-workflows",
                "description": "\n    🎯 Purpose:\n      1. This tool retrieves a paginated list of workflows from the HubSpot account.\n\n    🧭 Usage Guidance:\n      1. Use the \"limit\" parameter to control the number of results returned per page.\n      2. For pagination, use the \"after\" parameter with the value from the previous response's paging.next.after.\n      3. This endpoint returns essential workflow information including ID, name, type, and status.\n  ",
                "parameters": [
                  "after",
                  "limit"
                ],
                "required": [],
                "inputSchemaSha256": "95f9792c67e671a28890191f32e1ffcecfcf513ccf01ac5254b2e5ad3aaba36c"
              },
              {
                "name": "hubspot-search-objects",
                "description": "\n    🎯 Purpose:\n      1. Performs advanced filtered searches across HubSpot object types using complex criteria.\n\n    📋 Prerequisites:\n      1. Use the hubspot-list-objects tool to sample existing objects for the object type.\n      2. If hubspot-list-objects tool's response isn't helpful, use hubspot-list-properties tool.\n\n    📦 Returns:\n      1. Filtered collection matching specific criteria with pagination information.\n\n    🧭 Usage Guidance:\n      1. Preferred for targeted data retrieval when exact filtering criteria are known. Supports complex boolean logic through filter groups.\n      2. Use hubspot-list-objects when filter criteria is not specified or clear or when a search fails.\n      3. Use hubspot-batch-read-objects to retrieve specific objects by their IDs.\n      4. Use hubspot-list-associations to get the associations between objects.\n\n    🔍 Filtering Capabilities:\n      1. Think of \"filterGroups\" as separate search conditions that you want to combine with OR logic (meaning ANY of them can match).\n      2. If you want to find things that match ALL of several conditions (AND logic), put those conditions together in the same filters list.\n      3. If you want to find things that match AT LEAST ONE of several conditions (OR logic), put each condition in a separate filterGroup.\n      4. You can include a maximum of five filterGroups with up to 6 filters in each group, with a maximum of 18 filters in total.\n  ",
                "parameters": [
                  "after",
                  "filterGroups",
                  "limit",
                  "objectType",
                  "properties",
                  "query",
                  "sorts"
                ],
                "required": [
                  "objectType"
                ],
                "inputSchemaSha256": "9c2a98e770e5ff53c9c04fbf05243679eab957af45e066e886e921bbf991db3f"
              },
              {
                "name": "hubspot-update-engagement",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Updates an existing HubSpot engagement (Note or Task).\n      2. Allows modification of engagement attributes, content, and metadata.\n\n    📋 Prerequisites:\n      1. You need the engagement ID to update an existing engagement.\n      2. Use the hubspot-get-engagement tool to get the current engagement details if needed.\n      3. Use the hubspot-get-user-details tool to get the owner ID.\n\n    🧭 Usage Guidance:\n      1. Use for updating NOTE content or TASK details (subject, description, status).\n      2. Only include the fields you want to update - other fields will remain unchanged.\n      3. HubSpot notes and task descriptions support HTML formatting. However headings (<h1>, <h2>, etc.) look ugly in the CRM. So use them sparingly.\n  ",
                "parameters": [
                  "associations",
                  "engagementId",
                  "metadata",
                  "ownerId",
                  "timestamp"
                ],
                "required": [
                  "associations",
                  "engagementId",
                  "metadata"
                ],
                "inputSchemaSha256": "89cf8aa721fd6346f2814cd31496f7d61f77fa9478fcea7af1889e048476b825"
              },
              {
                "name": "hubspot-update-property",
                "description": "\n    🛡️ Guardrails:\n      1. Data Modification Warning: This tool modifies HubSpot data. Only use when the user has explicitly requested to update their CRM.\n\n    🎯 Purpose:\n      1. Updates existing custom properties for HubSpot object types, enabling data structure customization.\n\n    🧭 Usage Guidance:\n      1. Use hubspot-list-objects tool to sample existing objects for the object type.\n      2. If hubspot-list-objects tool's response isn't helpful, use hubspot-list-properties tool.\n  ",
                "parameters": [
                  "calculationFormula",
                  "description",
                  "displayOrder",
                  "fieldType",
                  "formField",
                  "groupName",
                  "hidden",
                  "label",
                  "objectType",
                  "options",
                  "propertyName",
                  "type"
                ],
                "required": [
                  "objectType",
                  "propertyName"
                ],
                "inputSchemaSha256": "cec43a765fbee78c0713ac92308324a58c375b2e4035ba41279880578f8b075f"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "读取和更新 HubSpot CRM 中的联系人、公司、交易和工单。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 读取和更新 HubSpot CRM 数据：查询联系人和公司、管理交易管道、创建工单和记录备注。适合以 HubSpot 为业务数据中心的销售自动化、线索补全和客户支持工作流。",
                "whenToUse": "智能体需要补全线索、更新 CRM 记录、记录销售活动或在 HubSpot 中创建支持工单时。",
                "whenNotToUse": "CRM 工作流不基于 HubSpot（例如 Salesforce）时。"
              },
              "credentials": {
                "hint": "在 HubSpot 中创建私有应用，并复制只授予最小必要权限的访问令牌。"
              },
              "fields": {
                "PRIVATE_APP_ACCESS_TOKEN": {
                  "label": "HubSpot 私有应用访问令牌",
                  "description": "HubSpot 私有应用的访问令牌"
                }
              },
              "security": {
                "riskNotes": "可访问包括联系人个人信息在内的 CRM 记录。请使用只授予最小必要权限的私有应用令牌。"
              },
              "pricing": {
                "notes": "HubSpot CRM 免费；包括免费版在内的所有套餐都可以使用 API。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "hubspot-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "com.forgeuno/notion-mcp",
        "title": "Notion",
        "description": "Read and write Notion pages, databases and blocks through the Notion API.",
        "version": "2.5.1",
        "repository": {
          "url": "https://github.com/makenotion/notion-mcp-server",
          "source": "github"
        },
        "websiteUrl": "https://developers.notion.com",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "@notionhq/notion-mcp-server",
            "version": "2.5.1",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Internal integration secret of the Notion integration",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "NOTION_TOKEN"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-JPG38WoSxYxZMk+fLgqsibU1rhvCSbK1JSMUlw5DPyoc1LveN2cz5C1lbJFcv7mZTa/DAOP4zbfxNj4YtN/lcQ==",
            "lockfile": {
              "sha512": "sha512-H+zvZZFuMFQw6E5JmVuB3H73v5A6dUQWQc++jZuavftexf8Ztrawkd47tMqcLT6HYY7jeWVPeMhJ7hCEv/9pyQ==",
              "url": "https://forgeuno.com/api/v2/mcp/notion-mcp/2.5.1/package-lock.json"
            },
            "bin": "bin/cli.mjs",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-03-16",
            "tier": "official"
          },
          "com.forgeuno/security": {
            "level": "caution",
            "permissions": [
              "read:pages",
              "write:pages",
              "read:databases",
              "write:databases",
              "search:content"
            ],
            "dataExposure": "content",
            "requiresSupervisor": false,
            "riskNotes": "Can read and write Notion pages, databases. Scoped by integration permissions."
          },
          "com.forgeuno/capabilities": {
            "category": "productivity",
            "detailedDescription": "Enables AI agents to interact with Notion workspaces through the Model Context Protocol. Supports reading and creating pages, querying databases, managing blocks, and searching content. Access is scoped by the Notion integration permissions configured by the workspace admin.",
            "whenToUse": "When the agent needs to read or modify content in Notion workspaces, pages, or databases.",
            "whenNotToUse": "When working with other project management tools like Linear or Jira.",
            "inputTypes": [
              "text",
              "json"
            ],
            "outputTypes": [
              "text",
              "json"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://www.notion.so/my-integrations",
            "hint": "Create a Notion integration and copy its Internal Integration Secret, then share the pages or databases it should access with the integration."
          },
          "com.forgeuno/fields": {
            "NOTION_TOKEN": {
              "label": "Notion Integration Token"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "Notion API is free; Notion workspace plans vary."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": null,
            "nativeModules": false,
            "startsWithoutCredentials": true,
            "credentials": "none",
            "installSizeBytes": 36696064,
            "tools": [
              {
                "name": "API-create-a-comment",
                "description": "Notion | Create comment\nError Responses:\n400: Bad request",
                "parameters": [
                  "parent",
                  "rich_text"
                ],
                "required": [
                  "parent",
                  "rich_text"
                ],
                "inputSchemaSha256": "1651488de0e161f183310265d99b9c3bd8d06e64c0133505bb8e7a4877fc76e4"
              },
              {
                "name": "API-create-a-data-source",
                "description": "Notion | Create a data source\nError Responses:\n400: Bad request",
                "parameters": [
                  "parent",
                  "properties",
                  "title"
                ],
                "required": [
                  "parent",
                  "properties"
                ],
                "inputSchemaSha256": "a8a254b9a0d92ab1de6e657b10d3a48de47c0b97df0c65b32a78cc94fe11872f"
              },
              {
                "name": "API-delete-a-block",
                "description": "Notion | Delete a block\nError Responses:\n400: Bad request",
                "parameters": [
                  "block_id"
                ],
                "required": [
                  "block_id"
                ],
                "inputSchemaSha256": "c9f3490169076f620588192f530d1a772958fd3f74b37392490622447f43e3b6"
              },
              {
                "name": "API-get-block-children",
                "description": "Notion | Retrieve block children\nError Responses:\n400: Bad request",
                "parameters": [
                  "block_id",
                  "page_size",
                  "start_cursor"
                ],
                "required": [
                  "block_id"
                ],
                "inputSchemaSha256": "fbb71511eed10a361ff9bb1b45c15e0184ee20ce723b49adb265496745ef0358"
              },
              {
                "name": "API-get-self",
                "description": "Notion | Retrieve your token's bot user\nError Responses:\n400: Bad request",
                "parameters": [],
                "required": [],
                "inputSchemaSha256": "5c6baa56325858d191abb76f8ca31666a0ea8281d22978e2718f7d416350e1ab"
              },
              {
                "name": "API-get-user",
                "description": "Notion | Retrieve a user\nError Responses:\n400: 400",
                "parameters": [
                  "user_id"
                ],
                "required": [
                  "user_id"
                ],
                "inputSchemaSha256": "ca57eb311e1a2ae3943d79f0b2e98df9c7bde15ee5c2aa3f8a926f1150656f71"
              },
              {
                "name": "API-get-users",
                "description": "Notion | List all users\nError Responses:\n400: 400",
                "parameters": [
                  "page_size",
                  "start_cursor"
                ],
                "required": [],
                "inputSchemaSha256": "d9551699baeb090a405077cdee10434a06f4785ac9862424b0562907d588c32f"
              },
              {
                "name": "API-list-data-source-templates",
                "description": "Notion | List templates in a data source\nError Responses:\n400: Bad request",
                "parameters": [
                  "data_source_id",
                  "page_size",
                  "start_cursor"
                ],
                "required": [
                  "data_source_id"
                ],
                "inputSchemaSha256": "98278348b1e5421f7ef67b58addd10e7c1fd3177b08262d9796a2eb73b2cfc65"
              },
              {
                "name": "API-move-page",
                "description": "Notion | Move a page\nError Responses:\n400: Bad request",
                "parameters": [
                  "page_id",
                  "parent"
                ],
                "required": [
                  "page_id",
                  "parent"
                ],
                "inputSchemaSha256": "f4c99092a0d6bb2243ad300d56d0eac41360a97332bd652273eda6859cac2035"
              },
              {
                "name": "API-patch-block-children",
                "description": "Notion | Append block children\nError Responses:\n400: Bad request",
                "parameters": [
                  "after",
                  "block_id",
                  "children"
                ],
                "required": [
                  "block_id",
                  "children"
                ],
                "inputSchemaSha256": "91ea78cb4b23afbf8adefef55ad0b8fa4754427a617eb992e90812874ac609f8"
              },
              {
                "name": "API-patch-page",
                "description": "Notion | Update page properties\nError Responses:\n400: Bad request",
                "parameters": [
                  "archived",
                  "cover",
                  "icon",
                  "in_trash",
                  "page_id",
                  "properties"
                ],
                "required": [
                  "page_id"
                ],
                "inputSchemaSha256": "6dff3e37a72390b7073a6b216633789d37a0a742d88a7a7f0f8ccf62e6aaa3c5"
              },
              {
                "name": "API-post-page",
                "description": "Notion | Create a page\nError Responses:\n400: Bad request",
                "parameters": [
                  "children",
                  "cover",
                  "icon",
                  "parent",
                  "properties"
                ],
                "required": [
                  "parent",
                  "properties"
                ],
                "inputSchemaSha256": "378456ee9948181308bb066479413637872cdcfb252a71c6d712fcad4c0a47d1"
              },
              {
                "name": "API-post-search",
                "description": "Notion | Search by title\nError Responses:\n400: Bad request",
                "parameters": [
                  "filter",
                  "page_size",
                  "query",
                  "sort",
                  "start_cursor"
                ],
                "required": [],
                "inputSchemaSha256": "832536fa4d1043586fa8d9923325924c0037a595cee58ef42480489bd87663a3"
              },
              {
                "name": "API-query-data-source",
                "description": "Notion | Query a data source\nError Responses:\n400: Bad request",
                "parameters": [
                  "archived",
                  "data_source_id",
                  "filter",
                  "filter_properties",
                  "in_trash",
                  "page_size",
                  "sorts",
                  "start_cursor"
                ],
                "required": [
                  "data_source_id"
                ],
                "inputSchemaSha256": "53fe0f1928671057b821652bc63333fe8c6a02f5284ff45c6cd777ddc99df529"
              },
              {
                "name": "API-retrieve-a-block",
                "description": "Notion | Retrieve a block\nError Responses:\n400: Bad request",
                "parameters": [
                  "block_id"
                ],
                "required": [
                  "block_id"
                ],
                "inputSchemaSha256": "c9f3490169076f620588192f530d1a772958fd3f74b37392490622447f43e3b6"
              },
              {
                "name": "API-retrieve-a-comment",
                "description": "Notion | Retrieve comments\nError Responses:\n400: Bad request",
                "parameters": [
                  "block_id",
                  "page_size",
                  "start_cursor"
                ],
                "required": [
                  "block_id"
                ],
                "inputSchemaSha256": "467a4815f8ecf55fb096dab29c657f608fcf2221dd5a5aec17c9fa0c65e32c48"
              },
              {
                "name": "API-retrieve-a-data-source",
                "description": "Notion | Retrieve a data source\nError Responses:\n400: Bad request",
                "parameters": [
                  "data_source_id"
                ],
                "required": [
                  "data_source_id"
                ],
                "inputSchemaSha256": "ae821dc37e42061564b9a210d379f159986d59884b3c94cceab95fab42ba8911"
              },
              {
                "name": "API-retrieve-a-database",
                "description": "Notion | Retrieve a database\nError Responses:\n400: Bad request",
                "parameters": [
                  "database_id"
                ],
                "required": [
                  "database_id"
                ],
                "inputSchemaSha256": "9e813751eedb5c1126940fe5906264fc0954f0fc445ec38d42d2f7164c023b1e"
              },
              {
                "name": "API-retrieve-a-page",
                "description": "Notion | Retrieve a page\nError Responses:\n400: Bad request",
                "parameters": [
                  "filter_properties",
                  "page_id"
                ],
                "required": [
                  "page_id"
                ],
                "inputSchemaSha256": "70dd70561cde1aa7bee9a6a7c2c8dfb7d2e62395096187e490693137f737d434"
              },
              {
                "name": "API-retrieve-a-page-property",
                "description": "Notion | Retrieve a page property item\nError Responses:\n400: Bad request",
                "parameters": [
                  "page_id",
                  "page_size",
                  "property_id",
                  "start_cursor"
                ],
                "required": [
                  "page_id",
                  "property_id"
                ],
                "inputSchemaSha256": "9817060ff8c95a274488d1088789b335878fe5a6b03e854fafe0e8e6abbf0494"
              },
              {
                "name": "API-retrieve-page-markdown",
                "description": "Notion | Retrieve a page as Markdown\nError Responses:\n400: Bad request\n403: The integration lacks the read/update content capability required for this page.\n404: Page not found or not shared with the integration.\n429: Rate limited.",
                "parameters": [
                  "include_transcript",
                  "page_id"
                ],
                "required": [
                  "page_id"
                ],
                "inputSchemaSha256": "417e1613339d5c7a3d1d38e5535ba16e042b61b011ce02b2eb0c8614bbf89bbf"
              },
              {
                "name": "API-update-a-block",
                "description": "Notion | Update a block\nError Responses:\n400: Bad request",
                "parameters": [
                  "archived",
                  "block_id",
                  "type"
                ],
                "required": [
                  "block_id"
                ],
                "inputSchemaSha256": "936221c4f98eb26bee47eced0638a59e4ba715be7aacaf3145d0c55123d849b8"
              },
              {
                "name": "API-update-a-data-source",
                "description": "Notion | Update a data source\nError Responses:\n400: Bad request",
                "parameters": [
                  "data_source_id",
                  "description",
                  "properties",
                  "title"
                ],
                "required": [
                  "data_source_id"
                ],
                "inputSchemaSha256": "7a6fba547b77fb2acb45412170a409d19508de6daea934bf17504de4d14e3d2e"
              },
              {
                "name": "API-update-page-markdown",
                "description": "Notion | Update a page's content as Markdown\nError Responses:\n400: Bad request\n403: The integration lacks the read/update content capability required for this page.\n404: Page not found or not shared with the integration.\n409: Conflict (e.g. row limit exceeded).\n429: Rate limited.",
                "parameters": [
                  "insert_content",
                  "page_id",
                  "replace_content",
                  "replace_content_range",
                  "type",
                  "update_content"
                ],
                "required": [
                  "page_id",
                  "type"
                ],
                "inputSchemaSha256": "5e888c269af736a2b183ee8675ab797d68f2c017ddd3f99bb6ffb406ef972dad"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "通过 Notion API 读写 Notion 页面、数据库和块。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 操作 Notion 工作区：读取和创建页面、查询数据库、管理块以及搜索内容。访问范围受工作区管理员为 Notion 集成配置的权限限制。",
                "whenToUse": "智能体需要读取或修改 Notion 工作区、页面或数据库中的内容时。",
                "whenNotToUse": "使用 Linear、Jira 等其他项目管理工具时。"
              },
              "credentials": {
                "hint": "创建 Notion 集成并复制其内部集成密钥（Internal Integration Secret），再把需要访问的页面或数据库共享给该集成。"
              },
              "fields": {
                "NOTION_TOKEN": {
                  "label": "Notion 集成令牌",
                  "description": "Notion 集成的内部集成密钥"
                }
              },
              "security": {
                "riskNotes": "可以读写 Notion 页面和数据库，范围受集成权限限制。"
              },
              "pricing": {
                "notes": "Notion API 免费；Notion 工作区套餐各不相同。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "notion-mcp",
          "status": "active"
        }
      }
    },
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
        "name": "io.github.tavily-ai/tavily-mcp",
        "title": "Tavily Search",
        "description": "AI-optimized web search, extraction, crawling and research via the Tavily API.",
        "version": "0.2.22",
        "repository": {
          "url": "https://github.com/tavily-ai/tavily-mcp",
          "source": "github"
        },
        "websiteUrl": "https://tavily.com",
        "packages": [
          {
            "registryType": "npm",
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "tavily-mcp",
            "version": "0.2.22",
            "runtimeHint": "npx",
            "transport": {
              "type": "stdio"
            },
            "environmentVariables": [
              {
                "description": "Tavily API key",
                "isRequired": true,
                "isSecret": true,
                "format": "string",
                "name": "TAVILY_API_KEY"
              }
            ]
          }
        ],
        "_meta": {
          "com.forgeuno/package": {
            "integrity": "sha512-w2pmmmn/JKcNavylDoiNtNPflWt6SK2G1SVUvg0VvdvFJQUaOzEdanAm1VUWBOhUCqmVoBYVPstGcOoWvh8RQQ==",
            "lockfile": {
              "sha512": "sha512-0I0+EtonIFMXZHQUBwjH9XCJJv6yNuhE9Da6D5VZtxQ8D1oAmFSvWXNXkpFOItK3hfKlVrfmTKCFqmcw6dbTKQ==",
              "url": "https://forgeuno.com/api/v2/mcp/tavily-mcp/0.2.22/package-lock.json"
            },
            "bin": "build/index.js",
            "installScripts": {
              "allowed": [],
              "denied": []
            }
          },
          "com.forgeuno/review": {
            "result": "pass",
            "date": "2026-10-21",
            "tier": "community"
          },
          "com.forgeuno/security": {
            "level": "safe",
            "permissions": [
              "read:web_search"
            ],
            "dataExposure": "none",
            "requiresSupervisor": false,
            "riskNotes": "Read-only AI-optimized search."
          },
          "com.forgeuno/capabilities": {
            "category": "search",
            "detailedDescription": "Enables AI agents to perform web searches through the Model Context Protocol using Tavily's AI-optimized search engine. Returns search results specifically formatted for LLM consumption with relevant extracts and source URLs. Designed to provide high-quality, contextual search results for AI agent workflows.",
            "whenToUse": "When the agent needs AI-optimized web search results formatted for LLM processing.",
            "whenNotToUse": "When local or internal data search is needed rather than web search.",
            "inputTypes": [
              "text"
            ],
            "outputTypes": [
              "text",
              "json"
            ]
          },
          "com.forgeuno/credentials": {
            "type": "api-key",
            "url": "https://app.tavily.com/home",
            "hint": "Sign up at Tavily and copy your API key from the dashboard."
          },
          "com.forgeuno/fields": {
            "TAVILY_API_KEY": {
              "label": "Tavily API Key"
            }
          },
          "com.forgeuno/pricing": {
            "freeTier": true,
            "notes": "Tavily offers a free tier with limited searches; paid plans for higher volume."
          },
          "com.forgeuno/test": {
            "testedAt": "2026-10-23",
            "platforms": [
              "darwin-arm64",
              "linux-x64"
            ],
            "nodeMajors": [
              24
            ],
            "enginesNode": null,
            "nativeModules": false,
            "startsWithoutCredentials": true,
            "credentials": "none",
            "installSizeBytes": 20362311,
            "tools": [
              {
                "name": "tavily_crawl",
                "description": "Crawl a website starting from a URL. Extracts content from pages with configurable depth and breadth.",
                "parameters": [
                  "allow_external",
                  "extract_depth",
                  "format",
                  "include_favicon",
                  "instructions",
                  "limit",
                  "max_breadth",
                  "max_depth",
                  "select_domains",
                  "select_paths",
                  "url"
                ],
                "required": [
                  "url"
                ],
                "inputSchemaSha256": "a70615eefbf466c33fcee7fbba578f7ef4ab5450b0a5823536d0f1d16a33327f"
              },
              {
                "name": "tavily_extract",
                "description": "Extract content from URLs. Returns raw page content in markdown or text format.",
                "parameters": [
                  "extract_depth",
                  "format",
                  "include_favicon",
                  "include_images",
                  "query",
                  "urls"
                ],
                "required": [
                  "urls"
                ],
                "inputSchemaSha256": "adec28a05f0ff266e9dadb1a5b84964971904cd728940342cf1798523ae6311c"
              },
              {
                "name": "tavily_map",
                "description": "Map a website's structure. Returns a list of URLs found starting from the base URL.",
                "parameters": [
                  "allow_external",
                  "instructions",
                  "limit",
                  "max_breadth",
                  "max_depth",
                  "select_domains",
                  "select_paths",
                  "url"
                ],
                "required": [
                  "url"
                ],
                "inputSchemaSha256": "850771e01b84e05c03160388aab481bfecfa69f1a20e4e922ee6ff688c2b1691"
              },
              {
                "name": "tavily_research",
                "description": "Perform comprehensive research on a given topic or question. Use this tool when you need to gather information from multiple sources to answer a question or complete a task. Returns a detailed response based on the research findings. Rate limit: 20 requests per minute.",
                "parameters": [
                  "input",
                  "model"
                ],
                "required": [
                  "input"
                ],
                "inputSchemaSha256": "bef6d62ef6df956ab1ea7fad75b81183495ec2b877d0dbcf51dd7bca2417664e"
              },
              {
                "name": "tavily_search",
                "description": "Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.",
                "parameters": [
                  "country",
                  "end_date",
                  "exact_match",
                  "exclude_domains",
                  "include_domains",
                  "include_favicon",
                  "include_image_descriptions",
                  "include_images",
                  "include_raw_content",
                  "max_results",
                  "query",
                  "search_depth",
                  "start_date",
                  "time_range",
                  "topic"
                ],
                "required": [
                  "query"
                ],
                "inputSchemaSha256": "2196dd84627417e820c2300477fc6e4a4a3ce4dc418a6e7869306e94bf605689"
              }
            ]
          },
          "com.forgeuno/l10n": {
            "zh": {
              "description": "通过 Tavily API 进行为 AI 优化的网页搜索、内容提取、爬取和研究。",
              "capabilities": {
                "detailedDescription": "让智能体通过 MCP 使用 Tavily 为 AI 优化的搜索引擎进行网页搜索，返回专为大模型处理整理的搜索结果，附相关摘录和来源网址，为智能体工作流提供高质量、贴合上下文的搜索结果。",
                "whenToUse": "智能体需要为大模型处理优化的网页搜索结果时。",
                "whenNotToUse": "需要搜索本地或内部数据、而不是网页时。"
              },
              "credentials": {
                "hint": "注册 Tavily 并从控制台复制 API 密钥。"
              },
              "fields": {
                "TAVILY_API_KEY": {
                  "label": "Tavily API 密钥",
                  "description": "Tavily 的 API 密钥"
                }
              },
              "security": {
                "riskNotes": "只读的 AI 优化搜索。"
              },
              "pricing": {
                "notes": "Tavily 提供次数有限的免费额度，更高用量需要付费套餐。"
              }
            }
          }
        }
      },
      "_meta": {
        "com.forgeuno/listing": {
          "id": "tavily-mcp",
          "status": "active"
        }
      }
    }
  ]
}