Skip to main content
Glama
NologyAcu

MCP4Acumatica

by NologyAcu

MCP4Acumatica

Haftungsausschluss: Dieses Projekt ist eine unabhängige, von der Community entwickelte Integration und ist nicht mit Acumatica, Inc. verbunden, von ihr abgesegnet oder unterstützt. „Acumatica“ ist ein eingetragenes Warenzeichen von Acumatica, Inc. Die Verwendung des Namens und der API von Acumatica dient ausschließlich der Interoperabilität.

Ein Remote-Model Context Protocol (MCP)-Server, der Claude mit Acumatica ERP 2023 R2 verbindet. Er läuft auf Cloudflare Workers und nutzt OAuth-Authentifizierung pro Benutzer gegenüber Ihrer Acumatica-Instanz.

Jeder Benutzer authentifiziert sich mit seinen eigenen Acumatica-Anmeldedaten. Die Acumatica-Rolle dieses Benutzers steuert, welche Datensätze er sehen kann. Zusätzlich verlangt der MCP-Server für den Zugriff eine bestimmte Acumatica-Rolle, zeigt einen Einwilligungsdialog vor dem Zugriff und schwärzt automatisch sensible Felder, bevor die Daten das KI-Modell erreichen.

Funktionen

  • 49 Tools – 38 schreibgeschützte Lookups + 6 Utility-/Discovery-Tools + 4 Schema-Wissens-Tools + 1 Schreib-Tool (Kunden anlegen/aktualisieren, standardmäßig deaktiviert) (siehe Verfügbare Werkzeuge)

  • OAuth pro Benutzer – Benutzer melden sich mit ihren Acumen-Anmeldedaten an (oder per SSO)

  • Rollenbasierte Zugriff – Das Sicherheitsmodell von Acuma bestimmt, was jeder Benutzer sieht

  • Zugriffskontrolle – Nur Benutzer, die eine festgelegte Canary-Generic-Inquiry lesen können, können sich verbinden (Sie können die GI so einschrönen, wie Sie möchten; eine Marker-Rolle wie MCP Access ist der empfohlene Weg)

  • Einwilligung – Benutzer müssen der KI-Datenverarbeitung vor der Nutzung der Tools explizit zustimmen

  • Redaction sensibler Felder – SSN, Bankkonten, Gehalts- und andere personenbezogene Felder werden automatisch redfollowing, bevor die Daten den Server verlassen

  • Rate-Limiting – Standardmäßig 3 gleichzeitige Anfragen und 40 Anfragen/Minute pro Benutzer, beides über die Admin-Console einstellbar. Eine Anfrage, die alle Plätze belegt vorfindet, wartet kurz auf einen Platz reagiert Poetry. Ein Rejection liefert eine strukturierte Hülle { error: \"rate_limited\", retryAfterSeconds, actionRequired }, die der KI genau angibt, wie lange.

  • Paginationsverweigerung – List-/Query-Tools liefern bei Erreichen des Datensatzstab eine strukturierte Hülle { truncated, paginationSupported: false, actionRequired }, die die KI anleitet, den Benutzer um einen engeren Filter zu bitten, statt das Tool erneut aufzurufen.

  • Strukturiertes Audit-Logging – Alle Tool-Aufrufe, Ereignisse und Feld-Redaktionen werden protokolliert

  • Admin-Console – Weboberfläche unter /docs/admin, mit der Sie Logs ohne Neudeployment einsehen und laufende Systemeinstellungen ändern können

  • Langfristige Log-Aufbewahrung – R2-basierte Cloud-Fotospeicherung über Cloudflare Logpush und durchsuchbarer Log-Viewer

Architektur

Claude (claude.ai / Desktop / API)
    |
    v  MCP over streamable-http
+----------------------------------+
|  Cloudflare Worker               |
|  OAuth 2.1 Provider              |
|    /authorize -> Acumatica login |
|    /callback  <- Acumatica       |
|    (access gate + OIDC userinfo) |
|    /consent   -> AI data consent |
|    /token, /register (DCR)       |
|    /mcp -> McpAgent DO (49 tools)|
+---------------+------------------+
                |  Bearer token (per-user)
                v
        Acumatica 25R2 SaaS
        Contract-Based REST API
        Default/25.200.001

Voraussetzungen

  • Node.js >= 18

  • Ein Cloudflare-Konto (kostenpflichtiger Workers-Plan für Durable Objects)

  • Eine Acumatica-2025-R2-Instanz mit:

    • Eine Connected Application in SM303010, konfiguriert mit dem Authorization-Code-Flow (OAuth-Scopes werden vom Server in der Anfrage übertragen, nicht für die OAuth-App)

    • A callback-Endpoint auf Ihrem Worker als Redirect-URI

    • Ein MCPAccess-Generic Inquiry (SM208000) – eine triviale Canary-GI mit aktiviertem Expose via OData; die dem Login vorgeschalteten Check-In Zugriff prüft, ob der Benutzer diese GI lesen kann (siehe Architekturdokumentation)

    • Eine Möglichkeit, den Personenkreis einzuschränken, der diese GI – marker-Rolle MCP Access leerzugeben? (SM201005) nur für zugelassene Benutzer ist der empfohlene Weg)

Einrichtung

Es gibt drei Installationswege. Alle drei gehen von denselben Voraussetzungen auf Acuma-Seite aus – bitte zuerst die Acuma-Seite vorbereiten (siehe „Acuma-seitige Konfiguration“ unten), unabhängig davon, welchen Weg Sie wählen.

Weg

Am besten geeignet für

Terminal erforderlich?

A. Deploy-to-Cloudflare-Button

Personen, die eine reine GUI-Installation möchten

Nein

B. Einzeilen-Installer

Entwickler, die bereits git/node/npm haben

Ja (ein Befehl)

C. Manuelle Einrichtung

Alle, die jeden Schritt nachvollziehen möchten

Ja

Weg-A – Deploy-to-Cloudflare-Button (ohne Terminal)

Deploy to Cloudflare-Button

Der Button erstellt eine Kopie des Repos in Ihrem GitHub-Konto, liest wrangler.jsonc, legt automatisch die gemappten VL-Informationen für KV-Namespace und R2-Bucket an und veröffentlicht die erste Version. Die einzelnen Schritte:

  1. Klicken Sie den Button. Cloudflare werden Sie sich (oder für ein Konto neu) an und fordern den GitHub-Fork zur Freigabe.

  2. Bindungen bestätigen. Es werden Sie zweimal aufgefordert, den KV-Namespace zu erstellen – einmal für TOKEN_STORE (App-Daten: Tokens, neben Auslieferungsstatus, Cache, Konfiguration, Admin-Sessions) und einmal für OAUTH_KV (wird intern aus der OAuth-Bibliothekt verwendet). Das ist so gewollt: Beide Bindungen trennen dieselbe Kategorie und teilen sich niemals negative Schlüssel.

    Nur die beiden Name s-Names häufig vergil- "unterschiedliche Namen**.

Hinweis bleiben?

Sie müssen beide Namen verschiedene Namen geben, sonst scheitert die Bereitstellung.

⚠️ Geben Sie den beiden Namespaces andere Namen gesucht. Beispiel: mcp4acumatica-app für TOKEN_STORE und mcp4acumatica-oauth für OAUTH_KV. Die automatische Provisionierung von Cloudflare inherits die Namen mcp4acumatica in beiden Fällen – und zwei Namensräume mit demselben Titelanmelden, wenn Sie eine Fehlermeldung erhalten, die **ähnlich aus „Cannot provision Name“ ist. Behandlung der Grä entfernt manns "beide*Mängel, wenn die Hälfte der Umgebung erstellt" – Gehen Sie dazu Cocktail/Storage-Datenbanken → KV-Geshe – auf orphan mcp4 löschen und benennen Sie in Midemba cred, then. Grund: Cloud ACE is distributed? Virmineata; the setup.sh created a Namespace and bindet beide es an.

Die R2-Buckets (mcp4acumatica-logs, mcp4acumatica-index) werden gleichermaßen erstellt, sind aber explizit in wrangler.jsonc umbenannt, damit keine Konflikte entstehen. 3. Secrets festlegen. Werden die Cube-Secrets abgefragt, füllen Sie WordPress und containerticals ein:

  • ACUMATICA_CLIENT_ID – aus Ihrer Connected Application (SM303010)

  • ACUMATICA_CLIENT_SECRET – aus demselben Bildschirm

  • COOKIE_ENCRYPTION_COOKIE – öffnen Sie die Browser-Konsole auf einer beliebigen Seite und führen Sie den Code aus:

    [...crypto.getRandomValues(new Uint8Array(32))].map(b => b.toString(16).padStart(2,'0')).join('')

    Kopieren Sie den resultierenden 64-stelligen Hex-String und wählen den Wert.

  • ADMIN_SECRET – anschließend an eine sicheres Passwort Ihrer Wahl (schützt die /docs-Admin-Konsole). Sie können es direkt auf der Seite erzeugen: [...crypto.getRandomValues(new Uint8Array(24))].map(b => b.toString(16).padStart(2,'0')).join('')

  1. Bereitstellen. Cloudflare verbindet das Fork mit Workers Build und stößt die nächste Deploy an.

  2. Umgebungsvariable der Acuma-Instanz in Cloudflare aktualisieren. Nach dem Deploy, wählen Sie in der Cloudflare-Konsole: Workers & Pages → mcp4acumatica → Einstellungen → Variablen und Secrets und bearbeiten Sie dort:

    • ACUMATICA_URL (z. B. https://yourcompany.acumatica.com)

    • ACUMATICA_TENANT (Ihr Login-Tenant)

    • Optional: ACUMATICA_MAX_RECORDS, ACUMATICA_CANARY_GI, REDACT_PATTERNS, REDACT_SKIP

    Klicken Sie Speichern und Bereit using – Cloudflare stellt die neue Version bereit.

  3. Fügen Sie Ihrer Connected Application eine Redirect-URI hinzu. Ihr Worker ist jetzt unter https://mcp4acumatica.<your-account>.workers.dev erreichbar. Fügen Sie https://<host>/callback zu den Redirect URIs im Bildschirm SM303010 hinzu. (Wenn Sie stattdessen eine eigene Domain nutzen möchten: „Custom domain“ unten.)

  4. Vor weiteren Start die Vorprüfung durchführen: Sie erreichen die Preflight-Diagnose unter https://<host>/docs/admin/preflight, loggen Sie sich mit ADMIN_SECRET ein und starten die Diagnose. Sie testet die Verbindung zu Acuma, der OIDC Discovery-Endpunkt, die Credentials der Connected App, der Tenant-Pfad und die API-Kontraktversion – jede Fehlkonfiguration wird genannt.

Danach können sich Seine Claude mit dem Workspace verbinden (siehe Claude verbinden.

Pfad B – Einzeilen-Installer (Terminal)

Wenn Sie bereits git, node und npm installiert haben, führen Sie den Installierer aus:

curl -fsSL https://mcp4acumatica.hallboys.com/install.sh | bash

Dieses Skript klont das Repo, installiert Abhängigkeiten und führt ./setup.sh aus. Das Setup fragt die notwendigen Acume-Werte ab (URL, Tenant, Client-ID und -Secret der Connected Application), generiert die kryptografischen Secrets automatisch, erzeugt den KV-Namespace und R2-Bucket, überträgt Secrets autom Audio, deployed the deployment and run die Manternehmen aus Preflight.

Wenn Sie das Script zuerst ansehen möchten:

curl -fsSL https://mcp4acumatica.hallboys.com/install.sh -o install.sh
less install.sh   # read it
bash install.sh   # then run

Pfad C – Mannelle Einrichtung (Terminal)

1. Klonen und installieren

git clone https://github.com/hallboys/MCP4Acumatica.git
cd MCP4Acumatica
npm install

2. KV-Namespace erstellen

npx wrangler kv namespace create TOKEN_STORE

Notieren Sie die Namespace-ID aus der Ausgabe – Sie fügen sie in wunderbar.jsonc ein. Dieselbe ID wird und für die Bindings TOKEN_STORE und OAUTH_KV benutzt.

3. wrangler.jsonc konfigurieren

wrangler.jsonc liegt der Vorlage bei. Bearbeiten Sie diese Datei und ergänzen Sie:

  • die Namespace-ID aus Schritt 2 (beide müssenStore-Bindung und OAUTH_KV – dieselbe ID)

  • ACUMATICA_URL – die URL Ihrer Acuma-Instanz (z. B. https://yourcompany.acumatica.com)

  • ACUMATICA_TENANT – Standort Ihr Unternehmen/Mandant-Name

Wenn Sie Ihre eigenen für git status nicht sichtbar bleiben möchten (damit In Lin demand ohne Konflikte möglich bleibt):

git update-index --skip-worktree wrangler.jsonc

4. Secrets festlegen

npx wrangler secret put ACUMATICA_CLIENT_ID
npx wrangler secret put ACUMATICA_CLIENT_SECRET
npx wrangler secret put COOKIE_ENCRYPTION_KEY      # use `openssl rand -hex 32`
npx wrangler secret put ADMIN_SECRET                # any password — protects /docs/admin

5. Bereitstellen

npx wrangler deploy

6. Lokale Entwicklung (optional)

cp .dev.vars.example .dev.vars
# Edit .dev.vars with your Acumatica credentials
npx wrangler dev

Konfiguration der Acuma-Seite

Diese Vorbereitung wird unabhängig davon benötigen, welche installieren Sie sich weg. Sie lässt sich leider nicht automatisieren –/Acumatica-API stellt keine dafür offenen.

Connected Application (SM303010)

  1. Wechseln Sie bei Acuma zu System > Integration > Connected Applications (SM303010).

  2. Erstellen Sie eine neue Connected Application.

  3. Stellen Sie den OAuth-2.0-Flow auf Authorization Code.

  4. Fügen Sie eine Redirect-URI an: https://<worker-url>/callback (verwenden *.workers.dev-Host oder eine eigene Domain).

  5. Kopieren Sie hier Client ID und Client Secret – Sie steltren später in der Cloudflare-Credentials als Secrets.

Für die Federfl enthält keine Punkt-Einstellung zu und oben. Die OAuth-Scopes (owid profile email offline_access, inklusive offline_access, das die OAuth-Konfiguration tatsächlich als aktualitätsfreundliche refresh tokens ergänzen kann) sendet der MCP-Server in der Autorisierung an – nicht die Connected Application.

Zugriffskontrolle für Canary Generic Inquiry (SM208000, SM201005)

Bevor ein Benutzer die KI-Tools nutzen kann, startet der Login-Prozess eine Zugriffskontrolle: Er übergibt die Canary-GI über OData und prüft, ob der Token des Benutzers die GI Daten geben kann (200 → erlaubt, 403 → Kind). Der Server muss nie die Acuma-Rollenmitgliedschaft selbst auf; Er fragt nur: „Kann dieser Benutzer diese eine GI lesen?“ Sie können den Zugriff trotzdem wie in ihres sicherheits-Modell belieblieg einschränken. (Sie or eine MCP Access marker roll, the recommended method).

  1. Canary GI erstellen: System > Customization > Generic Inquiry (SM208000) → rufen Sie eine GI mit dem Namen MCPAccess und eine beliebige triviale Abfrage ein (eine einzige Irgendeine Tabelle genügt). Aktivieren Sie ““Expose via OData`.

  2. Zugriff einschränken (empfehlens even: die Marker-Rolle): System > Zugriff > Benutzerrollen (SM201005) → erstellen Sie eine Rolle namens MCP Access ohne Rechtekt, geben Sie nur der MCPAccess-GI diese Rolle und jedem Benutzer, er soll der AI-Assistent Zugriff haben diese Rolle zuweisen. Jede andere, der den OData-Read-Zugriff auf die GI setzt, funktioniert auch.

Der Name der Canary-GI lässt sich über die ACUMATICA_CANARY_GI-als (default MCPAccess). Konfigurieren Sie sie im Cloudflare-Dashboard (Variablen und Secrets), und eng or in der wrangler.json Datei.

Weisung über Generic-Inquiry-Zugriff für die KI (empfohlene Vorgabe)

Eine ausgereifte Acumatica-Instanz kann Hunderte von Generic Inquiries enthalten, die meisten gebaut für menschliche Bildschirme (breite Berichtsraster, Dashboards, Ad-hoc-Abfragen). Stellt man sie alle dem Assistenten bereit, überflutet das seinen Kontext und verleitet ihn dazu, die falsche Inquiry auszuwählen — und schlimmer noch: Eine parametrisierte GI, die über OData freigegeben ist, liefert stillschweigend falsche Daten: Ohne ihre Parameter abgefragt, gibt Acumatica Standard-/ungefilterte Zeilen zurück — ohne Fehler, was das Modell nicht erkennen kann. Das GI-Exposure-Gate macht daraus ein Opt-in: Sie markieren die GIs, die für einen Kl-Agenten wirklich nützlich und korrekt abfragbar sind (ExposedToMCP), und das Modell sieht nur diese.

Das Gate ist inaktiv, bis Sie es konfigurieren — der Server läuft, aber ohne Registry kann der Assistent keine GIs entdecken (acumatica_list_generic_inquiries gibt nichts zurück; eine Benutzerin oder ein Benutzer kann eine GI trotzdem über den exakten Namen ausführen). Die Aktivierung ist ein einmaliges Acumatica-Customization-Projekt — im Verzeichnis acumatica/ beigelegt; es ergänzt die Custom-Felder UsrExposedToMCP / UsrAIDescription (GIDesign) und UsrResAIDescription (GIResult) sowie die Formularänderungen an SM208000 — gefolgt von den Feed-GIs MCPGIs / MCPGIFields, dem Lesozugriff für die Rolle MCP Access auf die Feeds und dem Markieren der GIs, die Sie freigeben möchten. Siehe docs/generic-inquiries.md.

Siehe Generic Inquiries für die vollständige Begründung, welche GIs Sie freigeben sollten, und die Schritt-für-Schritt-Einrichtung.

Eigene Domain (optional)

Die Bereitstellung liefert Ihnen standardmäßig einen *.workers.dev-Hostnamen. Um einen eigenen Hostnamen anzubinden:

  • Über das Cloudflare-Dashboard: Workers & Pages → mcp4acumatica → Settings → Domains & Routes → Add. die Zone agree Domain muss sich in Ihrem Cloudflare-Konto befinden.

  • Über wrangler.jsonc: So you must kommentieren Sie den routes-Block am Anfang der Datei aus, bearbeiten Sie pattern und zone_name, und stellen Sie neu bereit.

Wenn Sie den Hostnamen ändern, denken Sie daran, die neue URL https://<host>/callback in SM303010 zu den Redirect-URIs Ihrer Connected Application hinzuzufügen.

Claude verbinden

Claude.ai / Claude Desktop

  1. Gehen Sie zu Settings > Connectors (Einstellungen > Connectors)

  2. Klicken Sie auf *Add Connector und geben Sie die URL ein: https://<your-worker-url>/mcp

  3. Bei der ersten Kante werden Sie zur Anmeldeseite Ihrer Acumatica-Instanz weitergeleitet

  4. Wenn es atomalis Ihr Konto lesen kann (d. h., Ihnen wurde Zugriff gewährt), sehen Sie eine Einwilligungsseite? die die KI-Datenverarbeitung erklärt

  5. Nachdem Sie der Einwilligung zugestimmt haben, hat Claude Zugriff auf alle 49 Tools.

Claude Code (CLI)

claude mcp add acumatica-erp --transport streamable-http https://<your-worker-url>/mcp

API (über Anthropic SDK)

Wenn Sie die Anthropic API mit MCP verwenden, richten Sie den MCP-Client auf https://<your-worker-url>/mcp aus. Der Server unterstützt OAuth 2.1 mit Dynamischer Client Registrierung unter /register.

Verfügbare Tools

Kern

Tool

Beschreibung

acumatica_get_customer

Kundendatensatz mit Kontakten, Kreditregeln und Saldo

acumatica_get_vendor

Lieferantendatensatz with Kontakten, Konditionen und Steuerinformationen

acumatica_get_sales_order

Verkautsauftrag mit Positionszeilen, Gesamtsummen und Versand

Finanzen / Buchhaltung

Tool

Beschreibung

acumatica_get_invoice

Debitorenrechnung mit Positionszeilen und Steuerdetails

acumatica_get_bill

Kriegen am Rechnung or artillery own connection

acumatica_get_journal_transaction

Hauptbuch Journal-Beleg mit Soll- und Haben-Details

acumatica_get_payment

Debitorenzahlung (AR) mit angemänkten Deities and Zuweisungen

acumatica_get_account

Kontenplan-[o] -- Verzeichnis lookup Emission (GL)

acumatica_get_check

KreditScheck (AP) / Zahlung an Lieferant inkl. Historie

Lagern & Lagerhaus

Tool

Beschreibung

acumatica_get_stock_item

Bestandsartikel mit Preisdaten, Warehoose qty, Lieferanten

acumatica_get_non_stock_item

Nicht-Bestandsartikel (Dienstleistungen, arbeiten, Ausgabe)

acumatica_get_inventory_quantity_available

Echtzeit-Verfügbarkeit unitierre all Loslager/wavehouses

acumatica_get_inventory_summary

Aggregierte Bestandsverbindlichkeiten pro Warehouse

acumatica_get_warehouse

Lager mit LagIn-placeührungen und Settings

acumatica_get_item_class

Artikelklassen-Standardwerte

Einkauf

Tool

Beschreibung

acumatica_get_purchase_order

Einkaufsbestellung mit Position, Lieferant und Summen

acumatica_get_purchase_receipt

Wareneingang mit Angaben und Einkauf-Verknüpfung

Projekte

Tool

Beschreibung

acumatica_get_project

Projektkopf, Status, Finanzzahlen

acumatica_get_project_task

Task (Vorgang) innerhalb eines Projekts

acumatica_get_project_budget

Budget-Einzelposten mit Ist- vs. Sollwerten

acumatica_get_project_transaction

Projekt-Transaktionsdetails: Kosten / Erlös

Service & Field

Tool

Beschreibung

acumatica_get_case

Support-Fall mit SLA, Priorität, Zeiterfassung

acumatica_get_service_order

Service-Auftrag im Field Service, mit Details & Terminen

acumatica_get_appointment

Termin (geplante/tatsächliche Zeiten), Mitarbeiter, Kosten/Deckung

Vertrieb & CRM

Tool

Beschreibung

acumatica_get_contact

CRM-Kontakt mit Adresse, Telefon, Besitzerin/Besitzer

acumatica_get_business_account

Einheitlicher Interessen-/Kunden-/Lieferantendatensatz

acumatica_get_opportunity

Vertriebschance (Pipeline-Deal) inkl. Produkte & Beträge

acumatica_get_lead

Lead (Interessent) mit Quelle nicht Status

acumatica_get_salesperson

Vertriebsmitarbeiter:in mit Provisionssettings

Versand & Auftragsabwicklung

Tool

Beschreibung

acumatica_get_shipment

Lieferung mit Paketen, Tracking, Fracht

acumatica_get_sales_invoice

Verkautsrechnung mit SO-/Verknüpfungsinfos

HR & Gehaltsabrechnung

Tool

Beschreibung

acumatica_get_employee

Mitarbeiter with Kontakt- und Finanz-Einstellungen

acumatica_get_expense_claim

Spesenabrechnung mit Positionen und Status

acumatica_get_time_entry

Zeiterfassung mit Projekt, abrechenbar / Überstunden

CRM-Aktivitäten

Tool

Beschreibung

acumatica_get_email

E-Mail-Aktivität mit From/To/Body

acumatica_get_event

Kalendertermin with den Teilnehmern

acumatica_get_activity

Allgemeine CRM-Aktivität

acumatica_get_task

CRM-Aufgabe / -Aufgabe related activities

Dienstprogramme / Datenverwaltung

Tool

Beschreibung

acumatica_run_inquiry

Beliebige Generic Inquiry (GI)ausführen, mit Filter

acumatica_list_entities

Entitäten und Suchen (Entities) auflisten durchsuchen (OData)

acumatica_describe_entity

Felder, Typen und Unteranlagen für eine Entität entdecken

acumatica_list_generic_inquiries

Über OData vorgesehene Generic List

acumatica_describe_inquiry

Schema für eine GI ableiten before dem Ausführen

acumatica_clear_cache

Clear — Cache für Metadaten leeren, if schema changes

Tipp: Verwenden Sie zuerst acumatica_describe_entity, um verfügbaren Felder zu find, danach acumatica_list_entities zum Suchen/Filter. Bei Generic nutzen Sie acumatica_list_generic_inquiries, um GI-Namen zu finden sowie acumatica_describe_inquiry für die möglichen Felder. Siehe docs/example-prompts.md für Anwendungsbeispiele.

Dokumentation

Ausführliche Dokumentation verfügen Sie im Ordner docs/:

  • Tool-Referenz -- Vollständige Spezifikation aller 49 Tools mit Parametern und Endpunkten

  • Beispiel-Prompts -- Beispiele für Claude und andere MCP-Clients, nach Anwendungsfällen

  • OData-Filter Guide -- Anleitung zu $filter, $orderby, $select, $expand und $top-Query-Parametern

  • Generic Enquiries -- Warum GI für AI-Zugriffe begrest sind, welche GI freigegeben werden sollten und wie man register einschaltet

  • Schema-Wissen -- Offline-Schema-Discovery für Integrationen & Anpassungen, so wird Schema-index gebaut

  • Architecture -- Welche Architektur, OAuth-Flow, Privatsphäre/s Model and design decisions

  • Self-Hosting Guide -- Hinweise für Node.js und Alternativen außerhalb Cloudflare

  • Acuma aktualisieren -- Schritte as is given alone for the connected version

Skills

Wiederverwendbare Claude-Skills, die im Repo enthalten sind, im Ordner skills/:

  • acumatica-gi-descriptions -- End-to-end-End to End-Prozess für; "AI las descriptions" for Generic Inquiries and Result columns: Basierend werden auf der GI-Design-Metadata (Tabellen, Joins, JOINDER, where conditions, fields) estaten instead of guessing from names. Includes Platform-Tripwires that cause mass GI-Metadadata silently brokenes, a checklist of useful design signals, and three Skripte für "truncation", "design briefing" etc.

Zur Verwendung weisen Sie auf auf das Skill-Verzeichnis verweisen, oder kopieren Sie es in Ihr eigenes .claude/skills/-Verzeichnis.

Security

Verwandeln Sie es, nicht in english / Leave you.

  • Keine gespeicherten Anmeldedaten. Der MCP-Server speichert keine Acumatica-Passwörter. Er verwendet den OAuth-2.0-Authorization-Code-Flow -- Benutzer authentifizieren sich direkt bei Acumatica.

  • Benutzerbezogene Tokens. Das Acumatica-Zugriffstoken jedes Benutzers wird im Key-Value-Store der Plattform gespeichert (bei der Standardbereitstellung Cloudflare KV), beschränkt auf dessen Benutzernamen. Abgelaufene Tokens werden automatisch erneuert. Wenn ein Refresh-Token abläuft, authentifiziert sich die Verbindung automatisch neu, anstatt eine manuelle Neuverbindung zu erfordern.

  • Zugriffs-Gate. Nur Benutzer, die eine festgelegte Canary-Generic Inquiry lesen können, können sich verbinden. Der Server prüft die GI-Lesbarkeit über OData beim Login (nicht die Rollenmitgliedschaft); Benutzer ohne Zugriff sehen eine Seite „Zugriff verweigert“. Sie können die GI nach Belieben einschränken -- die empfohlene Vorgehensweise ist eine MCP Access-Markerrolle. Der Name der GI ist über ACUMATICA_CANARY_GI konfigurierbar.

  • Einwilligungsseite. Nach bestandener Zugriffsprüfung müssen Benutzer bestätigen, dass ihre Daten von einem externen KI-Modell verarbeitet werden, bevor die MCP-Session aktiviert wird.

  • Schwärzung sensibler Felder. Tool-Antworten werden automatisch nach sensiblen Feldnamen durchsucht (SSN, Bankkonten, Gehalt, Kreditkarten usw.) und übereinstimmende Werte werden durch [REDACTED] ersetzt. Die Muster sind über die Umgebungsvariablen REDACT_PATTERNS und REDACT_SKIP konfigurierbar.

  • Rollenbasierter Zugriff. Die Acumatica-Rolle des Benutzers bestimmt, welche Datensätze er lesen kann. Wenn ein Benutzer in Acumatica keinen Zugriff auf einen Datensatz hat, kann er auch über den MCP-Server nicht darauf verschließen.

  • Schreibgeschützt. Alle aktuellen Tools sind reine Leseabfragen. Es werden keine Daten erstellt, geändert oder gelöscht.

  • Ratenbegrenzung. 3 gleichzeitige Anfragen, 40 Anfragen pro Minute und ein Limit von 1000 Datensätzen pro Abfrage standardm. Diese sind alle über die Admin-Konsole unter /docs/admin/settings ohne erneutes Deployment konfigurierbar. Die Grenzen values gelten pro Benutzer und zählen HTTP-Aufrufe an Acumatica (nicht Tool-Aufrufe). Abgelehnte Anfragen senden eine strukturierte Envelope mit genauem retryAfterSeconds zurück und werden als rate_limit_hit-Ereignisse protokolliert, sodass Sie erkennen können, ob die Limits zu streng sind.

  • Paginierungsverweigerung. Die Listen-/Abfrage-Tools (acumatica_list_entities, acumatica_run_inquiry, acumatica_list_generic_inquiries) unterstützen keine Paginierung. Wenn eine Antwort ACUMATICA_MAX_RECORDS erreichen, gives das Tool eine strukturierte Umschlag (truncated: true, paginationSupported: false, actionRequired: "...") zurück, avec der Anweisung. Sie an, die KI anhält und den Benutzer um einen engeren Filter bittet, anstatt weitere Datensätze abzurufen.

  • Prüfprotokollierung. Alle Tool-Aufrufe, Authentifizierungsereignisse (Login erfolgreich/abgelehnt, Einwilligung erteilt) und Feld-Schwärzungsereignisse werden als strukturiertes JSON protokolliert. Anzeigen mit npx wrangler tail.

Plattform-Portabilität

Die Standardbereitstellung zielt auf Cloudflare Workers ab, die Tool-Handler und Kernbibliotheken sind jedoch plattformagnostisch. Eine Speicherabstraktion (IKeyValueStore-Schnittstelle + AppEnv-Typ) entkoppelt die Tool-Logik von Cloudflare-spezifischen APIs und ermöglicht selbstgehostete Bereitellungen auf Node.js mit Redis, SQLite oder anderen Speicher-Backends. Gründe hierfür finden Sie in der Self-Hosting Guide.

Tech-Stack

Entwicklung

npx wrangler dev       # Start local dev server
npx tsc --noEmit       # Type check
npx wrangler tail      # Stream live logs from deployed worker

Lizenz

Apache 2.0 -- Copyright 2026 Hall Boys, Inc.

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

Latest Blog Posts

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/NologyAcu/mcp4nology'

If you have feedback or need assistance with the MCP directory API, please join our Discord server