@expertcustom/funilaria-mcp
@expertcustom/funilaria-mcp
MCP-Server (Model Context Protocol) mit den typisierten Werkzeugen, die die Aurora der KI zum Schreiben und Lesen im Portal Funilaria & Pintura verwendet.
Es ersetzt mcp-fetch, das HTTP-Anfragen von Hand mit dem Geheimnis aufbaut, das in den System-Prompt geschrieben ist: Hier ist jede Operation ein Werkzeug mit Schema, Beschreibung und Fehlern auf Portugiesisch.
IA do Aurora ──stdio──> npx @expertcustom/funilaria-mcp ──HTTPS──> backend NestJSGemäß ADR-001 ist dieses Paket ein Adapter: Hier lebt keine Geschäftsregel. Jedes Werkzeug ruft einen bereits existierenden Endpoint auf, und der Backend-Dienst bleibt der Eigentümer der Entscheidung.
Tools
Werkzeug | Endpoint | Authentifizierung | Beschreibung |
|
| Dienst | Liefert eine Meldung an das CMS als Entwurf. Das Veröffentlichen bleibt eine menschliche Handlung. |
|
| Dienst | Registriert die rohe Antwort des Lieferanten bei WhatsApp; das Backend extrahiert Preis, Frist und Zustand. |
|
| Dienst | Bucht Materialverbrauch anhand der Mitarbeiter-Meldung. Gibt in |
|
| Dienst + | Bestand der Werkstattmaterialien, mit Hervorhebung dessen, was unter dem Minimum liegt. |
|
| Dienst + | Verbrauch, Zugang, Verlust und Kosten des Zeitraums, pro Material und pro Mitarbeiter. |
|
| öffentlich | Lieferantenverzeichnis mit Filtern nach Name, Art, Kategorie und Ort. |
Authentifizierung
Dienst-Zugangsdaten mit explizitem shopId sind der Hauptpfad, sowohl zum Schreiben als auch zum Lesen. Header x-aurora-secret, derselbe Wert wie AURORA_WEBHOOK_SECRET im Backend; er repräsentiert keine Person, sondern den Dienst.
Eine KI, die mehrere Werkstätte betreut, hat keine Sitzung, daher ist die Werkstatt Parameter, niemals impliziter Kontext. Dies übernimmt auf der Backend-Seite @AllowService() in den Lese-Routen für den Bestand: Das JwtAuthGuard akzeptiert das Geheimnis anstelle des JWT, und die ShopContextGuard verlangt nun shopId — eine nicht existierende ID antwortet mit 404 Oficina não encontrada, nicht mit einer leeren Liste, die mit „werkstatt ohne Bestand“ verwechselt werden könnte.
Benutzersitzung (JWT von POST /auth/entrar) wird weiterhin für die lokale Entwicklung verwendet: Ohne shopId stammt die Werkstatt aus der Sitzung. Der Access Token hält ca. 15 Minuten, also verlängert der Client ihn selbst über den Refresh-Token und speichert das rotierte Paar neu. Ein shopId in diesem Modus zu übergeben wird sofort abgelehnt, mit Erklärung — die Route würde die Werkstatt der Sitzung zurückgeben, als wäre sie die angeforderte.
Konfigur in Not: env
Konfiguration – env ist der Hauptweg
In Produktion startet das Aurora-Runtime diesen Prozess und injiziert die Variablen: Es gibt kein Terminal und es wird kein Login-Befehl ausgeführt. Der Server funktioniert vollständig ohne native Daten. Offensichtlich.
Env | Akzeptierter Alias | Zweck |
|
| Basis der API |
|
| Dienstgeheimnis ( |
|
| Dental Geheimnis der HMAC-Signatur (optional) |
| — | Standardwerkstatt für |
| — | Benutzer-JWT, falls vorhanden (optional) |
Die Aliase gibt es für den typischen Fehler, die .env > des Backends zu kopieren und das Geheimnis wegen des anderen Präfixes „verschwinden“ zu lassen — AURORA_WEBHOOK_SECRET hat auf beiden Seiten genau den gleichen Wert.
Die der alte Titel „Le secret" wird niemals hartcodiert und auch nicht aus dem Prompt geles. Sie besteht in der Datei ~/.config/funilaria-mcp/credentials.json (Modus 0600); diese ist eine Bequemlichkeit für lokale Entwicklung. Die Umgebungsvariable hat eine Vorrangstellung und wird nie auf den Datenträger geschrieben.
Das Boot-Protokoll schreibt der Server in stderr (stdout gehört zum MCP-Protokoll) eine Zeile, die aussagt, was konfiguriert ist und welche dabei aus welcher Umgebungsvariable stammt — niemals den Wert. Der entsprechende Eintrag erscheint dann im Log von Aurora, wenn jemand den Namen der Variablen falsch einträgt:
[funilaria-mcp] API: https://api.exemplo.com (FUNILARIA_API_URL) · Credencial de serviço: configurada via AURORA_WEBHOOK_SECRET · ...
[funilaria-mcp] Sem credencial de serviço: as tools de escrita vão recusar toda chamada. Defina FUNILARIA_SERVICE_SECRET no ambiente deste processo.HMAC-Signierung
Wenn FUNILARIA_SIGNING_SECRET existiert, enthält jeder Schreibvorgang auch:
x-timestamp: <epoch em segundos>
x-signature: sha256=<HMAC-SHA256(`${timestamp}.${corpo}`)>Das ist die in ADR-001 geplante Verbesserung (schließt Replay und Log-Leck). Das Backend prüft noch nicht – unbekannte header werden ignoriert, daher kann man die Server-Seite aktivieren, ohne bereits in Betriebs existierende zu beschädigen.
Installation
Im Aurora-KI (Produktion)
Registriere den Server mit den Variablen direkt in der MCP-Registrierung – kein Login, kein Geheimnis im System-Prompt:
{
"command": "npx",
"args": ["-y", "@expertcustom/funilaria-mcp"],
"env": {
"FUNILARIA_API_URL": "https://<api-do-portal>",
"FUNILARIA_SERVICE_SECRET": "<mesmo valor de AURORA_WEBHOOK_SECRET>"
}
}Lokal, für Entwicklung
# opção A — env no shell (igual à produção)
FUNILARIA_API_URL=http://localhost:3334 FUNILARIA_SERVICE_SECRET=... npx @expertcustom/funilaria-mcp
# opção B — guardar em ~/.config para não exportar em todo shell
npx @expertcustom/funilaria-mcp login-servico
# sessão de usuário: só é necessária para consultar_estoque sem shopId
npx @expertcustom/funilaria-mcp login
# conferir o que está valendo e de onde veio (nunca imprime segredo)
npx @expertcustom/funilaria-mcp status
# registrar no Claude Code
claude mcp add funilaria --env FUNILARIA_API_URL=http://localhost:3334 -- npx -y @expertcustom/funilaria-mcpOffene Punkte im Backend
Die vier ursprünglichen offenen Punkte (nicht aufrufbarer Webhook für Bestand, Lektüre ohne Dienst-Zugangsdaten, Geheimnis nach der Validierung geprüft, Distanz als „toter“) Code) wurden im Backend behoben und erneut gegen localhost:3300 abgeglichen, bestätigt. Was bleibt:
Die KI hat keine Möglichkeit, das
shopIdherauszufinden. Es ist die einzige Information, die sie auswendig kennen muss, und heute erreicht sie nur überFUNILARIA_SHOP_ID— verbindet eine Server mit einer Werkstatt und zerstört das Multi-Werkstatt-Szenario, das ausdrücklich den Entwurf des Dienstes motiviert hat.Der günstigste Punkt ist
lancar_consumo: Das Backend hat bereits Mitarbeiter und Autorität identifiziert über die WhatsApp-Nummer, gibt aber nur den Bestätigungstext zurück. WennIntakeResulteinenshopIdundmemberIdenthalten würde, would be a conversation flow — „Ich habe 100 ml Lack verbraucht" -> „Wie viel ich diesen Monat ausgegeben" würdeconsultar_balancetewith the two ids in use. Ohne das gibt es keine Antwort auf diese zweite Frage.GET /estoque/movimentosblieb außerhalb von@AllowService(). TheshopIdis declared inListMovimentos Dto, but the route accepts no service access — the parameter cannot be used. Either the route is specified or the field is removed from the DTO, so not com capability than not is present.Die HMAC-Signatur wird noch nicht geprüft. Der Client sendet bereits
x-timestampundx-signature, wenn es ein Signaturgeheimnis gibt (siehe oben). Es fehlt noch server side for the closing of the replay and log holes, as ADR-001 behält.
Development
npm install
npm run build # tsc estrito, gera dist/
npm start # sobe o servidor MCP em stdioThis 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
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
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/adventureandre/funilaria-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server