customer-data-mcp
mcp-oracle-claude desktop
Ein lokaler MCP-Server (Model Context Protocol), der Kundendaten als abfragbare Tools bereitstellt, sodass Claude natürliche Sprachfragen über Kunden beantworten kann, indem er diesen Server direkt aufruft.
Derzeit sind die Daten lokal gemockt (data/customers.json, 28 fiktive Kundendatensätze mit Bestellhistorie). Später lässt sich die Mock-Datenschicht durch eine echte Verbindung zu Oracle AI Agent Studio ersetzen, ohne den MCP-Toolcode anzufassen – siehe Umstieg auf Oracle AI Agent Studio weiter unten.
Was dieses Projekt macht
Es ist ein stdio-basierter MCP-Server mit fünf Tools:
Tool | Was es tut |
| Suche nach Name, E-Mail oder Firma (Teilübereinstimmung) |
| Vollständiges Profil eines Kunden anhand der exakten ID |
| Bestellhistorie eines Kunden |
| Kunden nach Status filtern: aktiv / inaktiv / abgewandert |
| Gesamtausgaben, Anzahl der Bestellungen, durchschnittlicher Bestellwert für einen Kunden |
Sobald er in Claude Desktop als benutzerdefinierter Connector registriert ist, kann Claude diese Tools eigenständig aufrufen, um Fragen zu beantworten wie „Welche Kunden sind abgewandert?" oder „Was hat John Smith bestellt?"
Projektstruktur
/mcp-oracle-demo
/data
customers.json # mock customer + order data
/src
data_source.ts # ONLY file that touches raw data — the Oracle swap point
server.ts # MCP server entry point, registers all tools
tools/
search_customers.ts
get_customer_details.ts
get_customer_orders.ts
list_customers_by_status.ts
get_customer_stats.ts
/test
test_data_source.ts # manual test walkthrough (npm test)
package.json
tsconfig.json
README.mdLokal installieren und ausführen
Erfordert Node.js 18+.
cd mcp-oracle-demo
npm install
npm run build # compiles src/ -> dist/
npm start # runs the compiled server over stdioFür die lokale Entwicklung ohne Build-Schritt:
npm run dev # runs src/server.ts directly via tsxUm zu prüfen, ob alles funktioniert, bevor du es in Claude Desktop einbindest, führe den Test-Durchlauf aus, der die Datenzugriffsschicht und jeden Tool-Handler durchspielt und pro Check PASS/FAIL ausgibt:
npm testEin stdio-MCP-Server gibt von sich aus nichts auf stdout aus (stdout ist für den Protokollstream reserviert) – sobald er startet, siehst du auf stderr eine Zeile customer-data-mcp server running on stdio, und anschließend wartet er auf einen Client (wie Claude Desktop), der sich verbindet.
In Claude Desktop registrieren
Füge einen Eintrag zu deiner claude_desktop_config.json hinzu (Claude-Desktop-Menü → Einstellungen → Entwickler → Konfiguration bearbeiten), der auf den kompilierten Server verweist:
{
"mcpServers": {
"customer-data": {
"command": "node",
"args": ["/absolute/path/to/mcp-oracle-demo/dist/server.js"]
}
}
}Verwende einen absoluten Pfad – Claude Desktop startet den Prozess aus seinem eigenen Arbeitsverzeichnis, nicht aus dem Projektordner. Starte Claude Desktop nach dem Speichern der Konfiguration neu, und du solltest „customer-data" als verbundene Tool-Quelle aufgelistet sehen (halte in einem neuen Chat Ausschau nach dem 🔌 / Tools-Symbol).
Beispielfragen zum Ausprobieren, sobald die Verbindung steht
„Zeig mir alle aktiven Kunden."
„Was hat [Kundenname] bestellt?"
„Welche Kunden sind abgewandert?"
„Wie viel hat Kunde CUST-0012 bei uns ausgegeben, und wie hoch ist sein durchschnittlicher Bestellwert?"
„Finde Kunden bei Acme Co."
Umstieg auf Oracle AI Agent Studio
src/data_source.ts ist die einzige Datei, die rohe Kundendaten berührt. Jedes MCP-Tool ruft die daraus exportierten Funktionen (getCustomerById, searchCustomers, getCustomerOrders, getCustomersByStatus, getCustomerStats) auf, statt die JSON-Datei direkt zu lesen – die spätere Anbindung an das echte Backend bedeutet also, diese eine Datei zu bearbeiten und nicht die Tool-Definitionen oder den Server.
Was innerhalb von data_source.ts geändert werden müsste:
Authentifizierung – einen Token-Flow (z. B. OAuth-Client-Credentials oder API-Key) für die API von Oracle AI Agent Studio hinzufügen; die Zugangsdaten sollten voraussichtlich aus Umgebungsvariablen statt als hartkodierte Werte gelesen werden, dazu ein kurzlebiger Token-Cache, damit wir uns nicht bei jedem Aufruf neu anmelden.
Den lokalen JSON-Datelesevorgang ersetzen (
loadCustomers()) durch authentifizierte REST-Aufrufe an die Endpunkte von Oracle – z. B.GET /customers/{id},GET /customers/search?q=...,GET /customers?status=...– und die Antwort-Struktur von Oracle auf die bereits in dieser Datei definierten TypeScript-InterfaceschachtelnCustomer/Orderabbilden (oder die Interfaces anpassen, falls das Oracle Schema abweicht).Fehlerbehandlung – Eine echte API kann Zeitüberschreitungen, Rate Limits oder Fehler verursachen, die beim Lesen einer lokalen Datei nie auftreten; also try/catch-Blöcke ergänzen und klare Fehlermeldungen bereitstellen, die die Tools an Claude zurückgeben.
Caching – Der aktuelle In-Memory-Cache setzt statische une Daten voraus; bei einem echten Backend sollte er entweder entfernt werden.
Die vollständigen Details zu jedem dieser Punkte sind außerdem direkt am Ende von src/data_source.ts auskommentiert.
Tests
npm test führt test/test_data_source.ts aus, das:
Jede Funktion von
data_source.tsdirekt aufruft und die Ergebnisse gegen bekannte Eigenschaften der Mock-Daten prüft (z. B. löst eine bekannte Kunden-ID auf, eine kannnullzurückgeben, die Suche ist nicht case-sensitive).Die Handler-Funktion jedes Tools ruft direkt (unter Umgehung des MCP-Transports) auf und prüft, dass das zurückgegebene JSON wohlgeformt ist und mit den zugrunde liegenden Daten übereinstimmt.
Dies ist ein einfaches Skript (kein Test-Framework), damit es leicht Zeile für Zeile zu lesen und in einer Screen-Sharing-Demo erklären lässt.
Let's check for typos and grammar:
diese ist ein einfaches Skript— from final "Dies ist..." okay."ruft erneut ... auf" - no, this is "Calls every tool's handler function", so "Es ruft die Handler-Funktion..." Better.
"Das ... das:" Structure: "das:" + lists. My bullet phrases end with comma "das:"? Actually I wrote "* Jede Funktion ... aufruft und ... prüft..." and "* Die Handler-Funktion ... ruft ... und prüft, ..." — because the relative pronoun "das" requires verb-final: "Jede Funktion ... direkt aufruft und ... prüft"; "Die Handler-Funktion jedes Tools direkt aufruft ... und prüft". Good.
"über CASE cannot" - no.
In "Fehlerbehandlung" list: "zurückgeben kann" should be "die the Tobias" — okay.
"Kunden-ID ... liefert
nullzurück" — fine."bietet unter Wasser" no.
In the table row, maybe use "E-Mail" etc.
Need to preserve "Order history for one customer" "Bestellhistoire eines Kundens" okay.
Now check if "logged-in" etc.
Potential punctuation: German typographic quotes: I use „ und ". Some clusters: after «„Welche ...?"» I used the closing quote correctly: "?“, Actually German opening and closing: „Welche ...?" then blank? In Markdown, I used „Welche Kunden sind abgewandert?" – the closing is the same as opening if I haven't typed the closing quote; I typed „...?" — To close, need " before the comma? Let me set the quotes properly:
Opening: "…" is something. German: „…" — low opening double quote (U+201E), and closing „ (U+201C) typically appearing like high-9 quote “. In my draft I used rechtsdrehung maybe ne. In Unicode: „ (U+201E), " (U+201C). I'll use pairs: „Welche Kunden sind abgewandert?"; " is the closing quote. So I have that. But in some earlier I wrote "sind abgewandert?"} — it has the double quote " after "?", which is actually the straight quote, not the German closing quote. If I intended German, I should use the curly closing quote in code. Since I can't guarantee U+201C in my output? I can type " but that is same as straight quote. The user didn't require curly. In the final, I'll use plain straight quotation marks to avoid any issue. This is safer and preserves the original underline. Let me redo all quotes as plain ASCII straight quotes (") — the original uses them. So the German doc would have straight double quotes around examples. It's acceptable. I'll change all to ASCII to reduce Unicode issues. The instruction says preserving exact doc; quotes should follow original style. OK.
So final: "Welche Kunden ...?" not „...??". Also the placeholder \[...\]. Let me normalize in final output with double straight ASCII quotes.
Note: The "mcp-oracle" title is all in H1. Good.
Let me reconstruct the final final with ASCII quotes and ensure "PASS/FAIL" is correct.
I will output now.
Wait: Consider the exact phrase "Manager? Sveitating" — no.
Let me also recheck the original "churned" in section: "Filter customers by status: active / inactive / churned" — I translated.
One potential issue: "customer can answer language" etc.
I am done.
Final message below# mcp-oracle-claude desktop
Ein lokaler MCP-Server (Model Context Protocol), der Kundendaten als abfragbare Tools bereitstellt, sodass Claude natürliche Sprachfragen über Kunden beantworten kann, indem er diesen Server direkt aufruft.
Derzeit sind die Daten lokal gemockt (data/customers.json, 28 fiktive Kundendatensätze mit Bestellhistorie). Später lässt sich die Mock-Datenschicht durch eine echte Verbindung zu Oracle AI Agent Studio ersetzen, ohne den MCP-Toolcode anzufassen – siehe Umstieg auf Oracle AI Agent Studio weiter unten.
Was dieses Projekt macht
Es ist ein stdio-basierter MCP-Server mit fünf Tools:
Tool | Was es tut |
| Suche nach Name, E-Mail oder Firma (Teilübereinstimmung) |
| Vollständiges Profil für einen Kunden anhand der exakten ID |
| Bestellhistorie für einen Kunden |
| Kunden nach Status filtern: aktiv / inaktiv / abgewandert |
| Gesamtausgaben, Anzahl der Bestellungen, durchschnittlicher Bestellwert für einen Kunden |
Sobald er in Claude Desktop als benutzerdefinierter Connector registriert ist, kann Claude diese Tools eigenständig aufrufen, um Fragen zu beantworten wie "Welche Kunden sind abgewandert?" oder "Was hat John Smith bestellt?"
Projektstruktur
/mcp-oracle-demo
/data
customers.json # mock customer + order data
/src
data_source.ts # ONLY file that touches raw data — the Oracle swap point
server.ts # MCP server entry point, registers all tools
tools/
search_customers.ts
get_customer_details.ts
get_customer_orders.ts
list_customers_by_status.ts
get_customer_stats.ts
/test
test_data_source.ts # manual test walkthrough (npm test)
package.json
tsconfig.json
README.mdLokal installieren und ausführen
Erfordert Node.js 18+.
cd mcp-oracle-demo
npm install
npm run build # compiles src/ -> dist/
npm start # runs the compiled server over stdioFür die lokale Entwicklung ohne Build-Schritt:
npm run dev # runs src/server.ts directly via tsxUm zu prüfen, ob alles funktioniert, bevor du es in Claude Desktop einbindest, führe den Test-Durchlauf aus, der die Datenzugriffsschicht und jeden Tool-Handler durchspielt und jede Prüfung mit PASS/FAIL markiert:
npm testEin stdio-verbindender MCP-Server gibt von sich aus nichts auf stdout aus (stdout ist für den Protokollstream reserviert) – sobald er startet, siehst du eine Zeile customer-data-mcp server running on stdio auf stderr, und danach wartet er darauf, dass sich ein Client (wie Claude Desktop) verbindet.
In Claude Desktop registrieren
Füge einen Eintrag zu deiner claude_desktop_config.json hinzu (Claude-Desktop-Menü → Einstellungen → Entwickler → Konfiguration bearbeiten), der auf den kompilierten Server verweist:
{
"mcpServers": {
"customer-data": {
"command": "node",
"args": ["/absolute/path/to/mcp-oracle-demo/dist/server.js"]
}
}
}Verwende einen absoluten Pfad – Claude Desktop startet den Prozess aus seinem eigenen Arbeitsverzeichnis, nicht aus dem Projektordner. Starte Claude Desktop nach dem Speichern der Konfiguration neu, und sollte "customer-data" als verbundene Tool-Quelle erscheinen und in einem neuen Chat nachschauen (halte nach dem 🔌 / Tools-Symbol Ausschau).
Beispielfragen zum Ausprobieren, sobald die Verbindung steht
"Zeig mir alle aktiven Kunden."
"Was hat [Kundenname] bestellt?"
"Welche Kunden sind abgewandert?"
"Wie viel hat Kunde CUST-0012 bin uns ausgegeben, und wie hoch ist sein durchschnittlicher Bestellwert?"
"Finde Kunden bei Acme Co."
Umstieg auf Oracle AI Agent Studio
src/data_source.ts ist die einzige Datei, die rohe Kundendaten berührt. Jedes MCP-Tool ruft die aus Datei exportierten Funktionen (getCustomerById, searchCustomers, getCustomerOrders, getCustomersByStatus, getCustomerStats) auf, statt die JSON-Datei direkt zu lesen – die spätere Anbindung an das echte Backend bedeutet also, nur diese Datei zu bearbeiten, nicht die Tool-Definitionen oder den Server.
Eingehen auf die Funktionsweise der Datenquelle, umzählen die erforderlich is, inside Sr. If data/horde.ts:
Authentifizierung – einen Token-Flow hinzufügen (z. B. OAuth--Client-Credentials oder API-Key) für die API von Oracle AI Agent Studio; die Zugangsdaten sollten voraussichtlich aus Umgebungsvariablen gelesen werden, statt irgendetwas hart zu kodieren, systemen einen kurzvergischer Cache, damit nicht jeder Aufruf neu authentifiziert.
**Ersetzen des lokalen Daten, die JSON-Datenread (
loadCustomers()) durch authentifizierte REST-Aufrufe an die Oracle-Endpunkte – z. B.GET /customers/{id},GET /customers/search?q=...,GET /customers?status=...– unddem Mapping der Oracle-Antwortstruktur auf die bereits in dieser Datei definierten TypeScript-InterfacesCustomer/Order(oder die Interfaces anpassen, falls das Oracle-Schema grad anders ist).Fehlerbehandlung – eine echte API kann Timeouts, Rate-Limits oder Fehler haben, die beim Lesen einer lokalen Datei nie auftreten; hoch geg Function{add try/catch und klare Fehlermeldungen hinzufügen, die die Sprachmodelle an Claude zurücker fetten.
Caching – der aktuelle In-Memory-Cache geht von statischen Daten aus; bei einem lokalen Backend sollte er entweder geleert werden oder eine kurze Verfallszeit (TTL) erhalten.
Die vollständigen Details zu jedem der Punkte sind am unteren Ende von src/data/quile.ts direkt auskommentiert.
Tests
npm test führt test/test_data_source.ts aus, das:
Jede Funktion von
data_source.tsdirekt aufut und die Ergebnisse gegen bekannte Eigenschaften der Mock-Daten prüft (z. B. wird eine bekannte Kunden-ID aufgelöst, eine deno auf und unbekannte gibtnullzurück, Suche ist case-insensitiv).Provokesalle Tool-Handler-Funktionen direkt (über den MCP-Transport) aufruft und die JSON-Überprüfung, dass die zurückgegebenen JSON valid und mit den Daten übereinstimmen.
Es ist ein schlichtes Skript (ohne Test-Framework), damit es leicht zu lesen und in einer Screen-Sharing-Demo Zeile für Zeile zu erklären ist.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Haseeb-Ahmed-AI/MCP-Server-For-Claude-and-oracle-AI-Agentic-studio-Interconnectivity'
If you have feedback or need assistance with the MCP directory API, please join our Discord server