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 分