HyperPay MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HyperPay MCPwhat does result code 800.100.151 mean, and should I retry?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HyperPay MCP
An MCP server that answers HyperPay integration questions inside your AI coding assistant, from an up-to-date copy of the official HyperPay (OPPWA) developer docs plus your team's own integration notes.
Ask Claude Code, Cursor, VS Code or any MCP client things like "how do I do a partial refund?", "what does result code 000.200.100 mean?" or "which test card forces a 3DS challenge?". The answers come with links to the source page and the date it was fetched.
Unofficial. This project is not affiliated with or endorsed by HyperPay. The documentation content belongs to HyperPay; see hyperpay.docs.oppwa.com.
Features
Tool | What it does |
| Searches the HyperPay docs and the team notes. Combines keyword search with meaning-based (semantic) search, so "void a payment" finds the Reversal docs. |
| Returns the full text of one docs page or team note. |
| Explains a result code ( |
| Shows when the docs were last fetched, which pages changed, and which team notes may be outdated. |
Stays current. The docs are re-fetched every 24 hours. Changed pages are detected by content hash.
Flags stale notes. When a docs page that a team note was written from changes, the note is marked "may be outdated" in search results.
Runs locally. No API keys and no external AI service. The embedding model runs inside the container, offline.
Read-only. It never calls the HyperPay payment API and holds no credentials.
Related MCP server: doc-bot
Quick start
Requirements: Docker with Docker Compose v2.
Start the server from the project folder:
docker compose up -d --buildOn the first start it builds its index: about 2 minutes to fetch the docs and embed them. The server answers right away, and search results fill in once indexing finishes.
Check that it is ready:
curl http://localhost:8081/healthReady when
"indexing": falseand"embedded"equals"sections".Connect your MCP client (see below), then ask a question.
Connect a client
Server URL: http://localhost:8081/mcp (Streamable HTTP, no authentication).
Client | Command or configuration | Status |
Claude Code |
| Tested |
Codex |
| Per vendor docs |
VS Code / GitHub Copilot | In | Per vendor docs |
Cursor | In | Per vendor docs |
Windsurf | In | Per vendor docs |
Claude Desktop | Through the | Per vendor docs |
Any other client | Use the server URL above |
"Per vendor docs" means the format follows that client's documentation but has not been tested with this server. Client config formats change; check the client's docs if one does not connect. Claude Desktop's Connectors menu only accepts public HTTPS URLs, so a local server needs the bridge.
Usage examples
You ask | Tool used |
"How do I refund part of a payment in HyperPay?" |
|
"Show me the full COPYandPAY integration guide" |
|
"What does 800.100.151 mean? Should I retry?" |
|
"Are our HyperPay notes still up to date?" |
|
How it works
Indexing is checked at startup and every hour after; it runs when the last successful run is older than 24 hours. Only new or changed pages are re-embedded.
docs sidebar ─> fetch 73 pages ─> keep <article> ─> split at headings ─> ~1500-char chunks
(1 page/second) │
knowledge/*.md (team notes) ────────────────────────────────────────────────┤
v
SQLite: full-text index + meaning vectors + page hashes
official result codes (JSON, 710 codes) ──────────────> result_codes tableSearching merges three signals with Reciprocal Rank Fusion:
question ─┬─ keyword search (BM25, stemmed) ─┐
├─ meaning search (embeddings, cosine) ─┼─> merge ─> drop duplicates ─> top results
└─ exact text match ─┘Keyword search finds exact identifiers (onBeforeSubmitCard, 000.200.100). Meaning search finds the same idea in different words ("money back" finds "refund"). Exact match keeps codes from being confused with similar-looking ones.
Freshness. Each page's text is hashed. A different hash on a later run records the page as changed. Team notes list their source pages in a Source: line at the top; if a source page changed after the note was last updated, the note is flagged.
Configuration
Settings are environment variables. Add them under environment: in compose.yaml.
Variable | Default | Purpose |
|
| Address the server listens on inside the container |
|
| Port the server listens on |
|
| Accepted |
| off | Set to |
|
| Requests per client IP per minute on |
Data: the index lives in ./data/, mounted into the container, so it survives rebuilds. To start fresh, run docker compose down, delete the files in data/, then docker compose up -d; the server rebuilds the index in about 2 minutes. Do not delete them while the server is running.
Updating the team notes: edit the files in knowledge/, then run docker compose up -d --build. The notes are built into the image, so the running server only sees edits after a rebuild.
Re-fetching the docs now: docker compose exec mcp node dist/indexer.js
Resource use
Measured on a full index rebuild:
Memory, idle | about 140–250 MB |
Memory, peak while indexing | about 275 MB |
Docker image | about 620 MB (includes the embedding model) |
Index on disk | about 10 MB |
Search time | about 20–40 ms |
A server with 512 MB to 1 GB of RAM is enough.
Development
Requires Node.js 24 or later (for the built-in node:sqlite); developed on Node.js 26.
npm install
npm run index # build the index once into ./data
npm run dev # run the server from TypeScript source (http://localhost:8081/mcp)
npm run build # type-check and compile to dist/ (a build with type errors writes nothing)
npm start # run the compiled serverProject structure:
src/
mcp.ts MCP server: the 4 tools, HTTP, rate limit, /health
search.ts hybrid search: keyword + meaning + exact match, merged with RRF
embeddings.ts local embedding model (bge-small-en-v1.5), query cache
indexer.ts fetches docs, splits and chunks pages, embeds, daily schedule
pages.ts docs URLs and page discovery from the sidebar
db.ts SQLite: pages, full-text index, vectors, result codes
freshness.ts detects team notes whose source pages changed
result-groups.ts result-code groups and the action for each
types.ts shared types
knowledge/ team integration notes (Markdown), indexed alongside the docs
data/ the index (created at runtime)Limitations
Two docs pages are nearly empty in the index.
/reference/payment-methodsand/reference/release-notesrender their content in the browser, and the indexer does not run a browser. The team notes cover payment methods.Invoicing and Transfer Funds are not covered. Their documentation is not part of
hyperpay.docs.oppwa.com.English only. The embedding model is English-only, so questions in other languages rely on keyword matches.
Ranking is good, not perfect. The small embedding model sometimes ranks the best section second or third. Try other words, or use
get_pageon a result's page.Some result codes are unclassified.
explain_result_codealways gives the official description, but its "what to do" groups come from the team notes and do not cover every code.
Troubleshooting
Problem | Fix |
Client cannot connect ( | The container is not running: |
Searches return nothing or "index is empty" | Indexing has not finished. Check |
| Rate limit reached; wait for |
| The |
A new or changed tool does not appear | MCP clients read the tool list when connecting. Reconnect the client. |
Something else |
|
Security
Listens on
127.0.0.1:8081only: other machines cannot connect unless you changecompose.yaml.Read-only: no HyperPay credentials, no payment API calls.
Rejects requests with unknown
Hostheaders (DNS rebinding protection) and rate-limits each client IP.Docs text is returned as data. Clients should treat it as documentation content, not as instructions.
License
MIT © 2026 Osama Sadah. This covers the code and the team notes in knowledge/.
It does not cover the HyperPay documentation: the server fetches that at runtime into data/, it is not part of this project's files, and it belongs to HyperPay.
Acknowledgements
Documentation content: HyperPay Developer Portal.
Embedding model: BAAI bge-small-en-v1.5 (MIT license), ONNX version by Xenova, run with transformers.js.
Built with the MCP TypeScript SDK.
This server cannot be deployed
Maintenance
Related MCP Connectors
Provide your AI coding tools with token-efficient access to up-to-date technical documentation for…
Versioned documentation registry and semantic search for AI tools and coding assistants.
Search your knowledge bases from any AI assistant using hybrid RAG.
Find, write, publish and check pages and API references in your DeveloperHub docs from an AI client
1
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides AI assistants with access to Payman's documentation, helping developers build integrations more efficiently through enhanced contextual support.5ISC
- AlicenseAqualityCmaintenanceProvides AI assistants with intelligent access to project documentation and API references through smart search, contextual rules, and Docset integration. Enables AI to understand project-specific conventions, patterns, and official framework documentation without token limits.1141 npm6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to search and retrieve information from a locally ingested knowledge base using hybrid search, grounded in user-curated documentation.16MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform semantic, hybrid, and filtered search on indexed local documentation with RAG capabilities.2MIT