afro.tools

io.github.afrotools由 GitHub 账号 afrotools 发布v1.0.1更新于 Nov 1, 2026

Open-source API specs for African providers (payments, SMS, KYC, delivery) for AI agents.

已验证Streamable HTTP可网页运行金融知识与记忆开发者工具

概览

AI 生成的概览

远程 MCP 服务器,提供非洲支付、短信、KYC、物流与语言类服务商的开源、AI 就绪 API 规范,帮助助手编写集成代码。

可以做什么
  • 列出服务商及其验证状态,并给出每项能力的状态标记
  • 按关键词搜索规范,并按类别、渠道、服务商、国家、币种、状态或能力类型筛选
  • 获取某服务商某项能力的完整规范,含鉴权方式、端点、数据结构、注意事项和 TypeScript 示例
  • 为尚不存在的规范提交请求,记录并通知维护者
  • 生成预填的 GitHub 链接,供用户反馈集成是否成功或规范是否有误
适用场景
当助手需要集成非洲服务商的 API(支付、短信/WhatsApp/USSD、身份验证、配送或语音)时适用,可直接获得结构化的机器可读规范,无需解析文档页面。也适合在依赖某份规范前先确认其验证程度。
运行要求
远程 streamable HTTP 端点,无需安装软件包。在 MCP 客户端(Claude Code、Cursor、Windsurf、VS Code Copilot)中连接托管地址即可。未声明任何鉴权、环境变量或请求头。需要能访问该端点的网络。
安装前请注意
未标记为已验证的规范是依据服务商文档编写、从未对真实 API 测试过,据此生成的代码可能有误;服务器要求助手向用户说明这一点。反馈工具只生成 GitHub 链接,服务器要求助手不要自行提交报告。对缺失规范的请求会被记录并发送给维护者。

安装

在 SourceWeft 中

  1. 打开 控制台中的 afro.tools,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.afrotools%2Fafrotools/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "afro-tools": {
      "type": "http",
      "url": "https://mcp.afro.tools/mcp"
    }
  }
}

README

Afro.tools — AI-ready infrastructure for African APIs

Integrate Wave, Paycard, and any African API in a single prompt.

African APIs are production-grade. What's been missing is a standard, machine-readable format that AI agents can consume directly — without parsing documentation pages or guessing at request shapes.

Afro.tools fills that gap: a static, open-source registry of structured specs for African APIs, written from each provider's official documentation. Every provider is AI Ready: an agent gets a structured description of exactly what it needs to generate integration code. A spec can still contain errors — its status says how far it has been checked (verified = tested against the provider's API by a maintainer).


How it works

mermaid
graph LR    A["specs/ — open source"] -->|GitHub raw URLs| B["MCP server\nmcp.afro.tools"]    B -->|MCP protocol| C["AI agent\nClaude · Cursor · Copilot · ..."]    C -->|generates| D["Integration code\nin your app"]    A -->|plugin| C

What is a spec?

A spec lives at specs/{category}/{provider}/{capability}/ and contains exactly two files:

  • schema.json — ATSS-compliant description of the API capability (endpoint, auth, input/output schemas, gotchas)
  • canonical_example.ts — TypeScript implementation using native fetch, compiles with tsc --noEmit

Each provider also has a provider.json at the root of its folder:

specs/payment/paycard/├── provider.json                    ← metadata + description + example_prompt├── create_payment/│   ├── schema.json│   └── canonical_example.ts├── verify_payment/└── webhook_payment_completed/

See ATSS.md for the full specification.


Providers

ProviderCategoryCountryCapabilitiesStatus
Paycardpayment🇬🇳3✅ All verified
SasPaypayment🇧🇫 🇧🇯 🇨🇩 +15137 verified · 6 ready
Smile IDidentity🇨🇮 🇸🇳 🇬🇳 +3117 verified · 4 ready
Bictoryspayment🇸🇳 🇨🇮 🇲🇱 +343 verified · 1 ready
Djomypayment🇬🇳73 verified · 4 ready
Infobipcommunications🇦🇴 🇧🇫 🇧🇮 +51132 verified · 11 ready
LengoPaypayment🇬🇳82 verified · 6 ready
Africa's Talkingcommunications🇧🇫 🇧🇯 🇨🇮 +1771 verified · 6 ready
Flutterwavepayment🇳🇬 🇬🇭 🇰🇪 +1533📋 Ready
Intronlanguage🇦🇴 🇧🇫 🇧🇮 +517📋 Ready
KadevPaypayment🇨🇮3📋 Ready
NimbaSMScommunications🇬🇳11📋 Ready
Notch Paypayment🇨🇲 🇨🇮 🇸🇳 +331📋 Ready
Orange Money Malipayment🇲🇱2📋 Ready
PayGatepayment🇹🇬6📋 Ready
Qosicpayment🇹🇬4📋 Ready
Wavepayment🇸🇳 🇨🇮 🇲🇱 +812📋 Ready
Yango Deliverylogistics🇨🇮 🇬🇭 🇸🇳 +18📋 Ready

Legend: ✅ All verified = all capabilities verified · X verified · Y ready = Y specs not yet tested against the API · 📋 Ready = written from the docs, not yet tested · 🗓 Planned = specs coming soon


Use with an MCP client

Claude Code

bash
claude mcp add --transport http afrotools https://mcp.afro.tools/mcp

Cursor / Windsurf / VS Code Copilot

json
{  "mcpServers": {    "afrotools": {      "type": "http",      "url": "https://mcp.afro.tools/mcp"    }  }}

Claude Code plugin

/plugin marketplace add afrotools/afrotools/plugin install afrotools

Auto-activated skills based on context:

  • payment — integrating a payment API
  • communications — integrating an SMS, WhatsApp, USSD, voice or email API
  • identity — integrating an identity verification (KYC, document, AML) API
  • logistics — integrating a delivery or courier API (price, book, track, cancel deliveries)
  • language — integrating a speech-to-text or text-to-speech API for African languages
  • debug — when an integration based on an afrotools spec fails → diagnoses whether the problem is a spec error, a missing gotcha, or an undocumented API change

Manual commands:

  • /afrotools:spec <provider> <capability> — inspect a full spec
  • /afrotools:list — list all available specs
  • /afrotools:new <category> <provider> <capability> — scaffold a new spec

Contributing

See CONTRIBUTING.md to add a spec or improve an existing one.

Integrated a provider? Report it — worked or not, sandbox or production. A report that worked can make the spec verified, credited to you; one that did not gets the spec fixed.

Spec lifecycle: draft → ready → verified

Every provider in the registry is AI Ready: its specs give an agent a structured, machine-readable description to integrate it. AI Ready is not a guarantee that a spec is error-free — verified marks the specs tested against the provider's API — by a maintainer or through an accepted integration report — and says where: sandbox or production.


License

Apache 2.0 — see LICENSE.

来源:README.md,提交 b90a35a

工具

5

list_providers

List Providers

Lists all providers and their verification status. Every listed provider is AI Ready: its specs give you a structured description to integrate it from. They can still contain errors — that is what each capability's "status" reports. all_verified is true only when ALL its capabilities have status "verified". Providers with any capability not yet "verified" have all_verified false — call search_specs or get_spec and check each capability's "status": one that is not "verified" has not been tested against the provider's API. Returns: { providers: Array<{ slug, name, category, channels?, all_verified, verified_count, capabilities, country_code, docs_public, docs_url }> }

无需输入参数。

search_specs

Search Specs

Searches specs by words and filters by category, channel, provider, country, currency, status or capability type. Returns the matching providers, each with its countries, currencies, sandbox flag, docs URL and the matching capabilities (name, type, status, example_prompt) — no endpoints, schemas, gotchas or canonical_example source. Use get_spec with the exact capability name to retrieve the full payload. A capability with "variants" has several request/response shapes (e.g. one per payment method or corridor): pass the ones you need to get_spec "variant" to receive only those. Each result includes a "status" field: - "verified": tested against the provider's API, in "sandbox" or "production" (verified_in / verification.environment) - "deprecated": the provider is retiring it — get_spec says what replaces it - anything else (e.g. "ready", "unverified"): written from the provider's documentation, NOT tested against the live API — may contain errors Always check the status field. If status is not "verified", inform the user that the spec is experimental and may contain errors. Args: - query (string?): Words, e.g. "wave", "mobile money senegal", "send sms", "kyc", "XOF". Every word must match somewhere: provider name or slug, capability, description, example_prompt, countries (code or English/French name), currencies, channels (a few synonyms: momo, otp, kyc, payout…). Providers the query names come first. - category (string?): Filter by category, e.g. "payment", "communications" (SMS, WhatsApp, USSD, voice and email providers — "sms" is accepted as a legacy alias), "identity" (KYC, document verification, AML), "logistics" (delivery and courier providers). The registry adds categories over time: list_providers shows every category that exists - channel ("sms"|"whatsapp"|"ussd"|"voice"|"email"?): Only providers that offer this channel - provider (string?): Provider slug e.g. "paycard" - country_code (string?): ISO 3166-1 alpha-2 e.g. "GN"

输入参数querystatuschannelcategorycurrencyprovidercountry_codecapability_type

get_spec

Get Spec

Returns the full spec payload for a provider + capability, including canonical_example.ts source code. Use this to get the complete integration guide — auth pattern, endpoint, schemas, gotchas, and a TypeScript example — before writing API calls. The response includes a "status" field: - "verified": tested against the provider's API, in "sandbox" or "production" (verified_in / verification.environment) - "deprecated": the provider is retiring it — "deprecation" gives the reason, replaced_by (the capability to use instead) and removed_after - anything else (e.g. "ready", "unverified"): written from the provider's documentation, NOT tested against the live API "verification" says how and when it was tested; sandbox proves the request and response shapes, not production behaviour. "open_questions", when present, lists what the provider's docs do not answer: tell the user before relying on the spec. "environments", when present, gives each documented environment's base URL; a missing one is undocumented — ask the user, never guess. "auth.credentials" / "signing" / "token_exchange" / "apply" and "webhook.signature", when present, describe the auth and webhook signature steps exactly: follow them. "parameters", when present, lists the path, query and header parameters; "input_schema" is the request body only. A path parameter fills the {name} placeholder of endpoint.url. "success_condition", when present, names the response field (dotted path) that says the call succeeded: a 2xx response with another value is a failure. If status is not "verified", always warn the user before generating integration code: "This spec has not been tested against the live API yet and may contain errors." Args: - provider (string): Provider slug e.g. "paycard" - capability (string): Capability name e.g. "create_payment" - variant (string[]?): Discriminator values to keep, e.g. ["mobile_money_ghs"] or ["bank", "NGN"]. In every union (oneOf) of input_schema and response_schema

输入参数variantprovider必填capability必填

request_spec

Request Spec

Logs a request for a spec that doesn't exist yet and notifies maintainers. Call this when a user asks for a provider or capability that has no spec in the registry (check list_providers first). This helps maintainers prioritize which specs to write next. Args: - provider (string): Provider slug e.g. "wave" - capability (string): Capability name e.g. "create_payment" Returns: { logged: true, count } if the request was recorded — count is the all-time number of requests for this exact provider+capability, including this one, so you can tell the user e.g. "you're the Nth person to ask for this". count is absent if it could not be reliably determined — in that case do NOT guess a number to the user, just confirm the request was logged. { logged: false, reason } if the spec already exists. isError if the request could not be stored: tell the user it was NOT recorded.

输入参数provider必填capability必填

report_integration

Report Integration

Builds a pre-filled GitHub link to report how an integration went against a spec — it worked, or the spec is wrong. Call it when the user confirms an integration works against the real API (sandbox or production), or when you find the spec does not match the API. Reports are how specs get verified and fixed. Nothing is posted: the user reviews the text and submits it on GitHub. One report per provider, covering every capability of the flow (e.g. payment init, status, webhook): each one is verified on its own. Args: - provider (string): Provider slug e.g. "paycard" - capabilities (array): Every capability the integration used, each with its own result e.g. [{ "capability": "create_payment", "result": "worked" }, { "capability": "webhook", "result": "wrong: status is SUCCESSFUL, spec says succeeded" }] - summary (string): One line about the flow, e.g. "checkout flow works in sandbox" - details (string): What was called, what came back, what differed from the spec. NEVER include API keys, tokens, phone numbers or personal data. - tested_on (string?): Date of the test, YYYY-MM-DD Returns: { url, next_step } — give the url to the user and follow next_step. If a spec does not exist: isError, with { error, available_capabilities } when the provider exists.

输入参数details必填summary必填provider必填tested_oncapabilities必填

版本历史

1
  1. v1.0.1最新Nov 1, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分