Rheintal Pumpen
FreeNot checkedReference MCP server simulating a B2B manufacturing company with role-based access, audit logging, and 13 business tools.
About
Reference MCP server simulating a B2B manufacturing company with role-based access, audit logging, and 13 business tools.
README
A public MCP server that simulates a fictional German B2B mid-market company – with role-based access control, audit logging, and a clean architecture you can study.
Connectable to Claude Desktop, a local LibreChat instance, or your own applications.
What is this?
A demonstration of how standardised AI tool integration can look in a mid-market company. Behind the MCP server sits a fictional firm, Rheintal Pumpen GmbH in Mainz, Germany – an industrial-pump maker with ~180 employees, 60 customers, 250 orders, plus complaints and service tickets.
Bring-your-own-key, self-hostable, MIT licensed.
Why is the company name German? Rheintal Pumpen GmbH is the story of the demo (a German Mittelstand company). Everything around it – code, tool descriptions, status enums, documentation – is in English.
Two ways to try it
Full local demo: LibreChat (15 minutes)
git clone https://github.com/dataAiOliver/rheintal-pumpen-mcp.git
cd rheintal-pumpen-mcp
make up
make up does everything in one step: creates .env from
.env.example, generates the SQLite database if it doesn't exist, and
starts LibreChat + MCP + MongoDB + Meilisearch via Docker Compose.
The first run prints a hint telling you where to put your OpenAI or
Anthropic key in .env. After that, run make up again and you're set.
Open http://localhost:3080 → register → start chatting.
You also get the built-in MCP Inspector at http://localhost:8765/:
tool list, JSON schemas, sample calls. Machine-readable as
/tools.json.
Live Activity at http://localhost:8765/activity: every tool call pops up live as a card with role, arguments and result. Nice demo punch line – stakeholders see in real time that the LLM is operating audit-ably.
Your own server (30 minutes)
make deploy SERVER=user@host
Prerequisites: a Linux server with Docker, your own domain, ports 80/443 open. Traefik takes care of TLS via Let's Encrypt.
→ docs/quickstart-own-server.md
Verifying the customer setup
After make up you can spot-check the stack:
make smoke-test # HTTP probes: /healthz, /tools.json, LibreChat root
make up-verify # 'make up' followed by smoke-test
To prove that the entire customer journey works on a clean Linux box – without trusting your own pre-installed Docker, make, etc. – run the DinD harness:
make test-fresh-ubuntu
It spawns a privileged ubuntu:24.04 container, runs
scripts/install-prereqs.sh to install Docker + make + git + curl + jq +
python3 from apt, starts an inner Docker daemon, performs make up, and
runs the smoke test. Takes 4–7 minutes (the LibreChat image pull
dominates) and is fully self-cleaning. See scripts/.
Try these prompts
- "Which customers have open invoices over 10,000 EUR?"
- "Show me all complaints from the last quarter."
- "Which submersible pumps with a stainless steel housing are in stock?"
- "What was the largest order in Q1, and how was it shipped?"
- "List the top 5 customers by revenue."
- "Which service tickets have been open for more than 7 days?"
- "Show me the order history of customer RH-K-00012."
Architecture
┌──────────────┐ HTTP/SSE ┌──────────────────────┐
│ Claude │◄──────────► │ MCP server │
│ Desktop │ │ (Python, mcp SDK) │
│ LibreChat │ │ │
│ Custom app │ │ Tools Auth Audit │
└──────────────┘ │ │ │
│ ▼ │
│ SQLite (mock) │
└──────────────────────┘
What is demonstrated
- MCP tool definitions with Pydantic schemas
- Role-based access control (
sales,service,accounting,admin) - Audit logging suitable for AI-Act / GDPR-style traceability
- Bring-your-own-key architecture
- Self-hosting with Docker Compose
- Clean separation of transport / logic / data
- Documented migration path SQLite → Postgres
Available MCP tools
| Tool | Roles | Description |
|---|---|---|
lookup_customer |
sales+ | Look up a customer by ID or company name |
list_customer_orders |
sales+ | Orders of one customer |
list_top_customers_by_revenue |
sales+ | Top-N customers, aggregated in a single call |
get_order_details |
sales+ | Order incl. line items |
get_invoice |
sales+ | One invoice |
list_open_invoices |
accounting, admin | Open/overdue invoices incl. customer name |
get_delivery_status |
sales+ | Delivery and tracking status |
search_products |
all | Product search |
get_product_details |
all | Product master data |
list_complaints |
service, admin | Filter complaints |
get_audit_log |
admin | Inspect the audit log |
create_service_ticket |
service, admin | write, requires confirm: true |
flag_invoice_for_review |
accounting, admin | write, requires confirm: true |
Architecture Decision Records
- 001 – Why SQLite
- 002 – Why MCP instead of REST
- 003 – Stdio and HTTP side-by-side
- 004 – Bring your own key
- 005 – No TLS on localhost
Licence
MIT. Use it. Fork it. Build on top.
About the author
Oliver Köhn – AI architect for the German Mittelstand.
Installing Rheintal Pumpen
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/dataaioliver/rheintal-pumpen-mcpFAQ
Is Rheintal Pumpen MCP free?
Yes, Rheintal Pumpen MCP is free — one-click install via Unyly at no cost.
Does Rheintal Pumpen need an API key?
No, Rheintal Pumpen runs without API keys or environment variables.
Is Rheintal Pumpen hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Rheintal Pumpen in Claude Desktop, Claude Code or Cursor?
Open Rheintal Pumpen on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Rheintal Pumpen with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
