Skip to main content
Glama
burakOzden1

ERP MCP Server

by burakOzden1

ERP MCP Agent

Ask your ERP questions in plain English, safely. This project connects Claude to business data (customers, stock, orders, invoices, payments) through a read-only MCP server. Staff can ask "Which products are below reorder level?" or "Is Oakhurst over its credit limit?" in Claude Desktop and get answers from live data. Two Claude Skills turn recurring office work (a weekly sales summary, customer payment reminders) into one-sentence requests.

The demo runs on a realistic, fully synthetic ERP database. The same pattern plugs into SQL Server, PostgreSQL or an existing ERP such as Netsis, Logo or Odoo (see Adapting it to your ERP).

🎬 Demo video: 2-minute walkthrough β€” link coming soon

flowchart LR
    U([Employee]) --> CD[Claude Desktop<br/>+ Skills]
    CD <-->|MCP| S[ERP MCP server<br/>5 read-only tools]
    S -->|parameterized SELECT| D[(ERP database)]
    S -->|every call| L[[Audit log]]

What it can do

Tool

Answers questions like

Parameters

get_stock

"Which products are below reorder level?" "How many 18V drills do we have?"

query, category?, below_reorder_only?

get_order_status

"What's the status of order SO-1537?"

order_no

get_customer_balance

"What is Foxglove's open balance? Are they over their credit limit?"

customer (code or name)

list_overdue_orders

"Which orders are late?" "Any delayed orders for Stonegate?"

customer?, min_days_late?

get_kpi

"How did revenue this quarter compare to last quarter?" "Top 5 customers in September?"

metric, period_start, period_end, compare_previous?

get_kpi metrics: revenue, top_products, top_customers, avg_order_value, overdue_receivables.

Skill

Ask

Produces

weekly-sales-summary

"Prepare this week's sales summary."

One-page manager report: revenue vs last week, top 5 products, stock at risk, late orders, overdue receivables, 3 action items

customer-email-draft

"Draft a payment reminder for Foxglove."

A polite email draft (never sent) plus internal review notes

Sample outputs: docs/sample-outputs.md

Related MCP server: legacy-db-mcp

Quick start (about 5 minutes)

Requirements: Python 3.11+, Claude Desktop, Git.

1. Install

Windows (PowerShell)

git clone https://github.com/burakOzden1/erp-mcp-agent.git
cd erp-mcp-agent
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"
.\.venv\Scripts\python.exe scripts\seed_db.py

macOS / Linux

git clone https://github.com/burakOzden1/erp-mcp-agent.git
cd erp-mcp-agent
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/python scripts/seed_db.py

seed_db.py creates data/erp_demo.db and prints the row counts and the planted demo situations (9 products below reorder level, 12 late orders, 6 customers with partially paid overdue invoices, 2 customers over their credit limit).

2. Connect Claude Desktop

Open Claude Desktop β†’ Settings β†’ Developer β†’ Edit Config and add the server under mcpServers (keep any servers you already have):

Windows

{
  "mcpServers": {
    "erp-demo": {
      "command": "C:\\path\\to\\erp-mcp-agent\\.venv\\Scripts\\erp-mcp.exe"
    }
  }
}

macOS

{
  "mcpServers": {
    "erp-demo": {
      "command": "/path/to/erp-mcp-agent/.venv/bin/erp-mcp"
    }
  }
}

Fully quit Claude Desktop (tray / menu bar β†’ Quit) and reopen it. The five erp-demo tools appear under the tools icon in a new chat.

3. Add the Skills (optional)

python scripts/package_skills.py

This writes dist/skills/weekly-sales-summary.zip and dist/skills/customer-email-draft.zip. In Claude Desktop, go to Settings β†’ Capabilities, make sure code execution is on, and upload both zips under Skills.

Example questions and answers

With the default dataset (data as of 2026-10-31):

Question

Expected answer (abridged)

Which products are below reorder level?

9 products. Most critical: SE-0012 Safety Glasses Economy (0 in stock, reorder level 75) and PT-0004 Cordless Drill 18V (1 in stock, reorder level 10).

What's the status of order SO-1537?

Shipped 2026-10-19, 16 days late (promised 2026-10-15). 6 lines, $4,550.02. Invoice INV-10526 is unpaid, due 2026-12-03.

Show me customers with overdue invoices.

$26,599.80 overdue across 6 customers. Largest: Larkspur Building Services $5,910.94; Starling Industrial Supply has the oldest invoice (87 days).

Is Oakhurst over its credit limit?

Yes. Open balance $8,374.96 vs a $5,000 limit; $5,877.08 is overdue.

How did revenue this quarter compare to last quarter?

Q4 so far (October) $100,451.98 vs Q3 $310,513.09. The quarter is only one month old, so like-for-like (October vs July) is βˆ’23.8%.

Prepare this week's sales summary.

See sample output.

Draft a payment reminder email for Foxglove.

See sample output.

Typos are handled: asking about "Oakhust" returns "Did you mean: Oakhurst Facilities Group (C-0007)?"

Security approach

Giving an AI model access to business data needs to be boring and predictable. This server is designed so that the worst a confused prompt can do is read a limited amount of data, and every read is recorded.

  • Read-only by construction. The database is opened with SQLite's mode=ro and PRAGMA query_only = ON. Tools carry MCP readOnlyHint / destructiveHint=false annotations. Tests confirm that INSERT, UPDATE, DELETE and DROP fail.

  • No free-form SQL. Claude cannot send SQL. Each tool runs one pre-written query with bound parameters; the KPI tool accepts only a fixed list of metrics.

  • Bounded results. List tools return at most 50 rows and say when more exist.

  • Audit trail. Every tool call (successful or not) is appended to logs/audit.jsonl:

    {"ts": "2026-10-28T18:26:45.327+00:00", "tool": "get_stock", "params": {"query": "", "category": null, "below_reorder_only": true}, "row_count": 9, "duration_ms": 2.29, "status": "ok"}
  • Human in the loop. The email Skill only drafts; a person reviews and sends.

  • Local by default. The server runs on your machine over stdio. No ports are opened, and the demo needs no credentials.

More detail: docs/architecture.md.

Adapting it to your ERP

The tool contract (names, parameters, JSON shape), audit log and Skills are independent of the database. Moving to a real system touches two files: db.py (connection) and queries.py (SQL).

  1. Pick the access path. Connect to a reporting replica or read-only views rather than the production schema. Create a dedicated database user with SELECT permission on those views only.

  2. Map the concepts. Every ERP has the same six building blocks: customer accounts, items/stock, sales orders and lines, invoices, and payments. Document which tables or views hold each, plus the status codes for open/shipped/delivered/cancelled.

  3. Swap the connection. Replace sqlite3 with pyodbc (SQL Server), psycopg (PostgreSQL) or the ERP's API/ODBC driver. Keep the read-only guarantees at the database-user level.

  4. Port the queries. Rewrite the SQL in queries.py for the new schema and keep the returned JSON fields the same, so Claude and the Skills need no changes.

  5. Add business rules. Multi-currency, branches or warehouses, VAT, credit control rules: add them as tool parameters or new fixed metrics, never as free SQL.

  6. Harden for production. Add authentication if the server is exposed over HTTP, ship the audit log to your log platform, and apply row-level filters per user or role.

Typical targets: Microsoft SQL Server based ERPs (e.g. Netsis, Logo), PostgreSQL based systems (e.g. Odoo), or accounting platforms with REST APIs (e.g. QuickBooks Online).

Project structure

erp-mcp-agent/
β”œβ”€β”€ src/erp_mcp/
β”‚   β”œβ”€β”€ server.py        # MCP server and the 5 tool definitions
β”‚   β”œβ”€β”€ queries.py       # parameterized SQL and KPI logic
β”‚   β”œβ”€β”€ db.py            # read-only connection
β”‚   └── audit.py         # JSON Lines audit log
β”œβ”€β”€ skills/
β”‚   β”œβ”€β”€ weekly-sales-summary/SKILL.md
β”‚   └── customer-email-draft/SKILL.md
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ seed_db.py       # builds the synthetic ERP database
β”‚   └── package_skills.py
β”œβ”€β”€ tests/               # pytest: queries, MCP protocol, audit, skills, data integrity
└── docs/                # architecture, demo script, sample outputs

Development

python -m pytest            # 52 tests, about 2 seconds
python scripts/seed_db.py --as-of today   # re-anchor the demo data to today's date

Configuration via environment variables: ERP_DB_PATH (database file) and ERP_AUDIT_LOG (log file).

Windows: quit Claude Desktop before re-running pip install. While Claude Desktop runs the server, Windows locks .venv\Scripts\erp-mcp.exe and the reinstall fails halfway.

Built with the official MCP Python SDK (mcp 2.3).

License

MIT

Available Tools

5 tools
get_customer_balanceCustomer balanceA
Read-onlyIdempotent

Get a customer's account balance (accounts receivable).

Use for "What is Oakhurst's open balance?", "Is C-0034 over its credit limit?" or before drafting a payment reminder. Returns contact details, credit limit, invoiced, paid, open and overdue amounts, each overdue invoice with days overdue, and counts of open/overdue orders.

NameRequiredDescriptionDefault
customerYesCustomer code (e.g. 'C-0007') or name, full or partial (e.g. 'Oakhurst').

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations handle safety hints (readOnlyHint: true), the description significantly exceeds expectations by detailing the entire return payload, including contact details, credit limit, specific amount types (invoiced, paid, open, overdue), and detailed counts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately detailed, but every sentence contributes necessary informationβ€”purpose, examples, and return structureβ€”making the overall structure highly effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is highly complete. By listing every single data point returned (from contact details to overdue invoice details), it gives the agent maximum context regarding the operation's output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema coverage is 100%, the baseline score of 3 is met. The description merely reinforces the accepted formats for the customer input (code or name) which are already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The purpose is stated immediately and clearly: 'Get a customer's account balance (accounts receivable).' This is specific and easy for an agent to identify.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit, real-world examples of how and when to use the tool, such as checking 'What is Oakhurst's open balance?' or determining if a customer is over credit limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_kpiBusiness KPIsA
Read-onlyIdempotent

Calculate a business KPI for a date range from a fixed list of metrics.

Use for "How did revenue this quarter compare to last quarter?", "Top 5 products last month", "Average order value in 2026" or "How much is overdue?". Example: metric='revenue', period_start='2026-10-01', period_end='2026-12-31', compare_previous=true. Partial periods include a like-for-like comparison.

NameRequiredDescriptionDefault
limitNoNumber of items for top_* metrics.
metricYesrevenue = invoiced sales; top_products / top_customers = ranking by revenue; avg_order_value = revenue per invoiced order; overdue_receivables = unpaid past-due invoices as of period_end, with aging buckets.
period_endYesLast day of the period, YYYY-MM-DD (inclusive).
period_startYesFirst day of the period, YYYY-MM-DD.
compare_previousNoAlso return the previous period and % change. Calendar months, quarters and years compare with the previous calendar month/quarter/year; other ranges with the same-length window before.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds a real behavioral trait not in the annotations: partial periods produce a like-for-like comparison, which affects how results should be interpreted. It does not mention data freshness or latency, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs: purpose, then intent examples, then a concrete invocation with the partial-period caveat. Every sentence carries information and the most decision-relevant content is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the metric list restriction, date-range framing, comparison behavior, and concrete intents. What remains thin is guidance on choosing between the ranking metrics and the per-entity siblings such as list_overdue_orders.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed enum value meanings for metric and the comparison-window rules for compare_previous, so the baseline is 3. The description repeats those same fields in its example call without adding syntax or constraints beyond the schema; only 'fixed list of metrics' lightly reinforces the enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Calculate a business KPI for a date range') and scopes it to 'a fixed list of metrics', which signals the enum. It implicitly separates itself from per-record siblings like get_order_status or get_customer_balance by framing this as aggregate reporting, but never names a sibling, so differentiation is by inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three example questions ('How did revenue this quarter compare to last quarter?', 'Top 5 products last month', 'How much is overdue?') effectively map natural-language intents onto specific metrics, which is strong routing guidance. It lacks any explicit when-not or prerequisite statement, so it stops short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_statusOrder statusA
Read-onlyIdempotent

Get the full status of one sales order.

Use for "What's the status of order SO-1042?" or "Has SO-1509 been invoiced or paid?". Returns header (customer, dates, status, lateness), order lines, and the invoice with payments and outstanding amount.

NameRequiredDescriptionDefault
order_noYesSales order number, e.g. 'SO-1042' (also accepts '1042').

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value by disclosing what the response contains β€” header with customer, dates, status and lateness, order lines, and invoice with payments and outstanding amount.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, example questions second, return shape last. No filler and every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be specified, yet the description still sketches them. For a single-parameter read tool, an agent has everything needed to select and call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already documented with format examples ('SO-1042', accepts '1042'). The description repeats the same example rather than adding syntax or edge-case meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Get the full status of one sales order') and scopes it to a single order, which cleanly separates it from list_overdue_orders and get_customer_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Two concrete example phrasings ("What's the status of order SO-1042?", "Has SO-1509 been invoiced or paid?") make the use case unambiguous. It stops short of naming which sibling to use for aggregate or overdue views, so it is clear context rather than explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stockStock lookupA
Read-onlyIdempotent

Look up product stock levels.

Use for questions like "How many cordless drills do we have?", "Which products are below reorder level?" or "Show stock for Safety Equipment". Returns stock quantity, reorder level, shortfall and units sold in the last 90 days. Results are sorted with the most critical stock first (max 50 rows).

NameRequiredDescriptionDefault
queryNoWords to match in product name, SKU or category, e.g. 'drill 18V' or 'PT-0004'. Empty = all products.
categoryNoExact category filter, e.g. 'Power Tools'.
below_reorder_onlyNoOnly products whose stock is below their reorder level.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely useful behavior beyond that: which fields come back (quantity, reorder level, shortfall, 90-day units sold), the sort order (most critical first) and the 50-row cap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in the first line, followed by examples and then return/sort details; every sentence carries information. The wrapped example list is slightly long but earns its place by clarifying filter usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter lookup with an output schema and full annotation coverage, nothing an agent needs is missing: it knows the trigger questions, the filter surface, the returned fields and the result ordering/cap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented with examples. The description's example questions loosely illustrate the query filter but add no syntax, matching behavior or empty-string semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Look up product stock levels') and immediately grounds it in concrete example questions. An agent can distinguish this from the sibling lookups (order status, customer balance, overdue orders, KPIs) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three example questions map cleanly onto the available filters (free-text search, below-reorder, category), giving clear context for when to call it. It stops short of explicitly naming what to use instead if the user wants order-level or supplier-level data, so a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_overdue_ordersOverdue ordersA
Read-onlyIdempotent

List sales orders that are late: promised date passed but not yet delivered.

Use for "Which orders are late?", "Show orders more than 14 days late" or "Does Foxglove have any delayed orders?". Sorted by days late, max 50 rows, with total value of the late orders.

NameRequiredDescriptionDefault
customerNoOptional customer code or name to filter by.
min_days_lateNoOnly orders at least this many days past the promised date.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered; the description goes further by disclosing result ordering ('sorted by days late'), a hard row cap ('max 50 rows'), and an aggregate ('total value of the late orders'). It does not say what happens when more than 50 orders are late (silent truncation vs. error), which is the one behavioral detail an agent would still want.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition, then usage intents, then output behavior. Three short blocks, each earning its place, with no restatement of the title or name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists and annotations cover safety, so the description only needs purpose, routing, and output-shape hints β€” all present. Nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear per-parameter descriptions, so baseline is 3. The example 'Show orders more than 14 days late' and the customer-specific example do implicitly illustrate how customer and min_days_late behave, but no additional format, default, or edge-case semantics are added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus a precise business definition: 'sales orders that are late: promised date passed but not yet delivered.' That definition cleanly separates it from siblings like get_order_status (single order lookup) and get_kpi (aggregates), which an agent can disambiguate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use for ...' clause is followed by three concrete user phrasings, including a customer-scoped one, which maps intent to tool effectively. It stops short of naming when NOT to use it or which sibling to pick for near-miss intents (e.g. a single order's status), leaving that inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedget_customer_balance
    • First observedget_kpi
    • First observedget_order_status
    • First observedget_stock
    • First observedlist_overdue_orders

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct ERP query area: order status, customer balance, overdue orders, stock, and KPIs. There is some possible overlap between get_order_status, list_overdue_orders, and get_kpi for overdue-related questions, but the descriptions clarify different scopes and outputs.

Naming Consistency5/5

All names use consistent snake_case verb_noun structure: get_order_status, get_customer_balance, list_overdue_orders, get_stock, get_kpi. The use of get_ vs list_ is predictable and semantically appropriate.

Tool Count5/5

Five tools is well-scoped for an ERP reporting/query server, with each tool covering a clear analytical need. There are no redundant tools and the surface feels appropriately focused rather than padded.

Completeness4/5

The surface covers key read-only ERP workflows: order status, receivables, overdue orders, stock, and KPI reporting. Minor gaps exist around broader lookup operations such as listing customers/products or searching orders, but core agent queries are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides structured, read-mostly access to small-business back-office data including customers, invoices, and account notes, allowing Claude to query overdue invoices, revenue summaries, and more.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Lets an LLM explore a cryptic legacy ERP schema in plain language through a semantic layer (table listing, column descriptions, published dictionary) and run single read-only SELECT queries that return capped results. Enforces safety at the database engine level: only reads are authorized, sensitive columns are masked to NULL, queries are aborted after a few seconds, and every call is written to an append-only audit log.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables Claude to answer questions about a small business's own data by providing predefined sales, customer, refund, and inventory tools, plus a guarded read-only SQL query tool with audit logging.
    6
    MIT