factory-floor-mcp
Provides read-only integration with SAP S/4HANA via OData V2 for production work orders. It can retrieve work order data using the API_PRODUCTION_ORDER_2_SRV service, with pagination and filtering by plant, and maps SAP fields to the server’s manufacturing data model. The adapter covers production orders only and is tested against mock OData responses.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@factory-floor-mcpWhy did OEE drop this week, and which machine caused the most downtime?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
factory-floor-mcp · שרת MCP לנתוני רצפת ייצור
שרת MCP לקריאה בלבד שנותן ל-Claude (או לכל לקוח MCP) גישה בטוחה לנתוני ייצור: מכונות, יומן ייצור, השבתות, פסולים, הזמנות עבודה ומלאי. הנתונים מגיעים מקובץ Excel (למשל ייצוא לילי מ-SAP או מ-MES), או ישירות מ-SAP S/4HANA דרך OData.
מנהל מפעל שואל בעברית "למה ה-OEE ירד השבוע?" או "אילו הזמנות יאחרו בגלל חוסר בחומר?". Claude קורא לכלים של השרת, מקבל מספרים מדויקים שחושבו בקוד, ועונה עם הסבר. השרת לא משנה אף נתון, מסתיר עמודות רגישות לפי מדיניות, ורושם כל קריאה ביומן ביקורת.
נתוני הדוגמה בריפו בדויים: מפעל קטן לעיבוד שבבי מדויק עם 8 מכונות CNC בשני קווים, יולי עד ספטמבר 2026.
מה אפשר לשאול
שאלה של משתמש | הכלים ש-Claude מפעיל |
"תן לי תמונת מצב של החודש מול החודש הקודם" |
|
"איזו מכונה הכי בעייתית, ולמה?" |
|
"מה גורם לרוב ההשבתות בקו B?" |
|
"אילו הזמנות באיחור, ואילו בסיכון לשבוע הבא?" |
|
"מה ייגמר לנו לפני שהספק יספיק לספק?" |
|
"איפה הכי הרבה פסולים?" |
|
"מה קרה עם WO-26043?" |
|
"הכן דוח משמרת למנהל" | הפרומפט המובנה |
Related MCP server: MCP SQL Server Gateway
תמונת מצב: 2026-08-26 עד 2026-09-24
OEE: 74.3% (-1.5 נקודות מול התקופה הקודמת)
זמינות 88.5% · ביצועים 85.8% · איכות 97.8%
השבתות לא מתוכננות: 234.1 שעות
אספקה בזמן: 69.2% (27 מתוך 39 הזמנות שהושלמו)
שלוש המכונות עם ה-OEE הנמוך
CNC-08: 66.5% (זמינות 89.3%, ביצועים 75.6%, איכות 98.5%)
CNC-04: 71.1% (זמינות 83.6%, ביצועים 86.8%, איכות 98.1%)
CNC-05: 71.2% (זמינות 84.9%, ביצועים 87.3%, איכות 96.0%)
סיבות ההשבתה המובילות
תקלת ציר: 3,950 דקות, 39 אירועים (28.1%)
המתנה לחומר גלם: 3,259 דקות, 72 אירועים (23.2%)
חוסר מפעיל: 2,110 דקות, 35 אירועים (15.0%)
הזמנות באיחור: 17
WO-26075 · מקדח קרביד 12 מ״מ · 1000 יח׳ · 61 ימי איחור · ממתין לחומר
WO-26043 · תותב הברגה M12 · 250 יח׳ · 51 ימי איחור · ממתין לחומר
WO-26092 · מקדח קרביד 12 מ״מ · 100 יח׳ · 50 ימי איחור · ממתין לחומר
חומרים מתחת לנקודת ההזמנה: 3
אינסרט חריטה CNMG: 4.8 ימי מלאי, זמן אספקה 5 ימים · ייגמר לפני שהספק יספיק לספק
מוט קרביד 12 מ״מ: 6.1 ימי מלאי, זמן אספקה 21 ימים · ייגמר לפני שהספק יספיק לספק
נוזל קירור (ליטר): 7.7 ימי מלאי, זמן אספקה 7 ימים
זה בדיוק סוג הקשר ש-Claude צריך למצוא: הזמנות של מקדח 12 מ״מ מחכות לחומר, ומוט הקרביד של 12 מ״מ מתחת לנקודת ההזמנה עם זמן אספקה של שלושה שבועות.
כלים, משאבים ופרומפטים
כלי | מה הוא מחזיר |
| הטבלאות, מספר שורות, טווח תאריכים ואילו עמודות מוסתרות |
| OEE ושלושת רכיביו, חלקים תקינים ופסולים, שעות השבתה, אספקה בזמן, הזמנות באיחור, חוסרי מלאי. בהשוואה לתקופה הקודמת באותו אורך |
| OEE לפי מכונה, קו, יום או משמרת, מהגרוע לטוב |
| השבתות לפי סיבה, עם אחוז מצטבר ו"המעטים החשובים" (80% מהדקות) |
| אירועי השבתה בודדים להעמקה. שמות מפעילים מוחלפים בכינוי קבוע |
| כמות ושיעור פסולים לפי סיבה, מכונה או מוצר |
| הזמנות לפי סטטוס, קו, מוצר וטווח תאריכי יעד |
| הזמנות באיחור והזמנות בסיכון לימים הקרובים |
| חומרים מתחת לנקודת ההזמנה, ימי מלאי, האם ייגמרו לפני אספקה, והצעת כמות להזמנה |
| חיפוש חופשי ברשומות (לא בעמודות מוסתרות) |
משאבים: factory://schema (מילון נתונים עם סיווג לכל עמודה), factory://policy (מה השרת רשאי להחזיר), factory://audit/recent (50 הקריאות האחרונות).
פרומפטים: shift_report (דוח ייצור יומי למנהל, בעברית), downtime_rca (ניתוח שורש להשבתות של מכונה).
כל הכלים מסומנים readOnlyHint. הקלט עובר ולידציה (תאריכים, מזהים, טווחים), וקלט שגוי מחזיר שגיאה ברורה ולא ניחוש.
ארכיטקטורה
flowchart LR
subgraph Clients["לקוחות MCP"]
CD[Claude Desktop / Claude Code<br/>stdio]
CE[Claude Enterprise / סוכנים<br/>Streamable HTTP + Bearer]
end
subgraph Server["factory-floor-mcp (קריאה בלבד)"]
T[כלים · משאבים · פרומפטים] --> AN[analytics.py<br/>OEE · פארטו · איחורים · מלאי]
T --> G[governance.py<br/>סיווג · הסתרה · תקרת שורות · יומן ביקורת]
AN --> SRC{RoutedSource}
end
CD --> T
CE -->|NGINX / Cloudflare / IIS| T
SRC --> XL[(Excel<br/>ייצוא לילי מ-SAP / MES)]
SRC -.->|work_orders| SAP[(SAP S/4HANA<br/>OData V2)]
G --> LOG[(audit.jsonl)]חישובים בקוד, לא במודל. OEE, פארטו, ימי מלאי ואיחורים מחושבים ב-
analytics.pyעם בדיקות יחידה. המודל מסביר ומקשר, ולא עושה חשבון.מקור נתונים לכל טבלה.
RoutedSourceמאפשר, למשל, הזמנות עבודה מ-SAP ושאר הטבלאות מ-Excel. קובץ Excel נטען מחדש אוטומטית כשהוא משתנה בדיסק.הפרדה בין פרוטוקול ללוגיקה.
create_server()מקבל מקור, מדיניות ויומן, ולכן כל שכבה נבדקת בנפרד.
ממשל נתונים ואבטחה
עיקרון | איך זה ממומש |
קריאה בלבד | אין אף כלי שכותב. הקוד לא מכיל קריאות כתיבה ל-SAP או לקובץ |
סיווג מידע | לכל עמודה רמה: ציבורי, פנימי או חסוי ( |
הסתרה | שמות לקוחות, מחירים ועלויות מוחלפים ב- |
מזעור | תקרת שורות לכל תשובה ( |
יומן ביקורת | כל קריאה, כולל כאלה שנכשלו, נרשמת ב-JSONL: זמן, כלי, פרמטרים, מספר שורות, משך ושגיאה |
אימות ב-HTTP | Bearer token חובה (לפחות 24 תווים, השוואה בזמן קבוע), ומטא-דאטה של OAuth Protected Resource לפי מפרט MCP. בלי טוקן השרת מסרב לעלות ב-HTTP |
הרצה בקונטיינר | משתמש לא-root, מערכת קבצים לקריאה בלבד ב-compose, והשרת חשוף רק דרך NGINX עם TLS |
הגדרות: FACTORY_MCP_MAX_LEVEL (public / internal / confidential), FACTORY_MCP_MAX_ROWS, FACTORY_MCP_AUDIT_LOG, FACTORY_MCP_SALT (למלח הכינויים), FACTORY_MCP_TOKEN.
התקנה וחיבור
pip install git+https://github.com/E37dey/factory-floor-mcpClaude Code:
claude mcp add factory-floor -- factory-floor-mcp --data /exports/plant.xlsx
# או לשרת מרוחק:
claude mcp add --transport http factory-floor https://mcp.plant.example/mcp --header "Authorization: Bearer $FACTORY_MCP_TOKEN"Claude Desktop: מוסיפים ל-claude_desktop_config.json את הבלוק שב-examples/claude_desktop_config.json.
שרת בארגון (Docker + NGINX):
docker build -t factory-floor-mcp .
cd deploy && FACTORY_MCP_TOKEN=$(openssl rand -hex 32) docker compose up -ddeploy/nginx.conf חושף רק את /mcp ואת המטא-דאטה של OAuth, עם buffering כבוי (התשובות יכולות לזרום). אותו עיקרון חל מאחורי Cloudflare Tunnel או IIS עם ARR.
חיבור לנתונים שלכם
Excel: חוברת עם גיליון לכל טבלה ושורת כותרת. שמות העמודות כמו בקובץ הדוגמה (scripts/make_sample_data.py מתעד אותם). מצביעים עליה עם --data או FACTORY_MCP_DATA.
SAP S/4HANA: מגדירים SAP_ODATA_BASE (שירות API_PRODUCTION_ORDER_2_SRV), משתמש טכני לקריאה בלבד (SAP_USER / SAP_PASSWORD) או SAP_TOKEN, ואופציונלית SAP_PLANT. הזמנות העבודה ייקראו מ-SAP, עם דפדוף וסינון לפי מפעל, והשאר מ-Excel. המיפוי בין שדות SAP לעמודות נמצא במילון FIELD_MAP ב-sap.py.
המתאם ל-SAP נבדק מול תשובות OData מדומות בלבד, לא מול מערכת SAP חיה. שמות השדות לקוחים מהתיעוד הציבורי של SAP, וכדאי לאמת אותם מול המערכת שלכם.
בדיקות
25 בדיקות pytest רצות ב-GitHub Actions על Python 3.10 ו-3.12, ואחריהן בנייה של קונטיינר ובדיקה שהוא מסרב לבקשות בלי טוקן:
חישובים: OEE לפי ההגדרה המקובלת, פארטו עם אחוז מצטבר, איחורים והזמנות בסיכון, התראות מלאי, השוואה לתקופה קודמת, ועקביות של נתוני הדוגמה.
ממשל: הסתרה לפי רמה, כינויים קבועים, הגדרות מסביבה, יומן ביקורת בקובץ.
פרוטוקול MCP: לקוח MCP אמיתי מול השרת (בזיכרון ובתהליך stdio נפרד): רשימת כלים וסכמות, תקרת שורות, דחיית קלט שגוי, הסתרה בחיפוש, משאבים ופרומפטים, רישום של קריאות שנכשלו.
SAP: פענוח תאריכי OData, מיפוי סטטוסים, דפדוף, סינון לפי מפעל וכותרת אימות, והשרת כשהזמנות העבודה מגיעות מ-SAP.
HTTP: 401 בלי טוקן או עם טוקן שגוי, 200 עם טוקן נכון, ומטא-דאטה של OAuth.
pip install -e ".[dev]"
pytest -q
python examples/morning_brief.pyמגבלות ידועות
טוקן משותף אחד מתאים לפריסה פנימית. לגישה לפי משתמש מחליפים את
StaticTokenVerifierבאימות מול ספק הזהויות של הארגון (למשל Entra ID) וממפים קבוצות להרשאות.המתאם ל-SAP מכסה הזמנות ייצור בלבד, ולא נבדק מול מערכת חיה.
בנוי על MCP Python SDK מסדרה 1.x (נעול ל-
<2). המעבר לסדרה 2.x עוד לא נעשה.נתוני הדוגמה בדויים.
English summary
factory-floor-mcp is a read-only Model Context Protocol server that gives Claude safe access to manufacturing data: machines, production log, downtime, scrap, work orders and inventory, from an Excel export or SAP S/4HANA (OData V2).
10 tools (OEE by machine/line/day/shift, downtime Pareto with vital few, late and at-risk orders, inventory alerts with stock-out-before-delivery, scrap, plant KPIs vs previous period, search), 3 resources (schema with classification, policy, recent audit), 2 prompts (daily shift report, downtime RCA).
All numbers are computed in code and unit-tested; the model explains them.
Governance: read-only, column-level classification, masking and stable pseudonyms for people, row caps, JSONL audit log of every call including failures.
Transports: stdio for Claude Desktop / Claude Code; Streamable HTTP with bearer-token auth and OAuth protected-resource metadata; Docker image (non-root) with an NGINX reverse-proxy example.
25 pytest tests including protocol-level tests with a real MCP client and a stdio subprocess; CI builds the container and checks it rejects unauthenticated calls.
Built on the MCP Python SDK 1.x (pinned
<2). The SAP adapter is tested against mocked OData responses only.
Sample data is fictional. MIT License.
Available Tools
10 toolsdowntime_eventsARead-only
Individual downtime events (newest first) for drill-down after downtime_pareto. Operator names are pseudonymized by policy.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| reason | No | ||
| date_to | No | ISO date YYYY-MM-DD | |
| date_from | No | ISO date YYYY-MM-DD | |
| machine_id | No | Machine id, for example CNC-05 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description adds two genuinely useful behavioral facts: results are ordered newest first, and operator names are pseudonymized by policy. The latter is a real data-handling disclosure an agent could not infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the resource and ordering front-loaded and the drill-down relationship second. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description covers purpose, ordering, privacy handling, and the drill-down relationship. The missing element is any pointer to the available filters, which matters for a tool whose parameters are largely undocumentmented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at only 60%, the description must compensate. It adds nothing about the parameters — notably 'reason' and 'limit' are undocumented in both schema and description, and nothing tells the agent that machine_id, reason, or date range can be used to narrow the drill-down.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (individual downtime events) and a clear scope ('newest first'), and explicitly frames itself as a drill-down companion to downtime_pareto, distinguishing it from that sibling's aggregate view. It stops short of an explicit verb like 'list', but the retrieval intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for drill-down after downtime_pareto' states exactly when an agent should reach for this tool and positions the sibling as the entry point. It provides no exclusions or negative guidance, but the triggering context is explicit rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downtime_paretoARead-only
Downtime by reason, largest first, with share and cumulative share (Pareto). vital_few lists the
reasons that make up the first 80% of lost minutes. Planned maintenance is excluded unless asked.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| line | No | Production line | |
| date_to | No | ISO date YYYY-MM-DD | |
| date_from | No | ISO date YYYY-MM-DD | |
| machine_id | No | Machine id, for example CNC-05 | |
| include_planned | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, so the description carries most of the behavioral load and does it well: default exclusion of planned maintenance, largest-first ordering, cumulative share output, and the meaning of the `vital_few` grouping. It stops short of mentioning aggregation window or empty-result behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences; the primary behavior (ranked downtime with cumulative share) leads, and the one notable default (planned maintenance excluded) follows. No filler or restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description supplies the default-exclusion rule and the vital_few semantics an agent needs to interpret results. Only the filter parameters' interactions (line/machine/date range together) go unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverate is 67% and the description touches only `include_planned` ('unless asked') and implies a top-N cutoff via vital_few. It says nothing about `top` (default 10, max 20), `line`, `machine_id`, or the date range semantics, so it adds little beyond the documented schema fields. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Downtime by reason') and the exact output shape: sorted descending with share and cumulative share. The reference to pareto/vital_few makes it unambiguous that this is an analysis tool rather than a raw event list like downtime_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one scoping rule ('Planned maintenance is excluded unless asked') which shapes when the tool is appropriate, but never contrasts it with siblings such as downtime_events or machine_oee, nor states when a Pareto view beats a plain event listing. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_ordersARead-only
Work orders filtered by status, line, product and due-date range, sorted by due date. Customer names and prices are withheld unless the server policy allows confidential data.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Production line | |
| limit | No | ||
| due_to | No | ISO date YYYY-MM-DD | |
| status | No | Order status in Hebrew | |
| due_from | No | ISO date YYYY-MM-DD | |
| product_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint, so the description carries the burden and adds genuinely useful behavior: customer names and prices are masked unless server policy permits confidential data. That is a non-obvious output trait an agent must know. It omits any note on pagination/limit behavior or result size, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core filtering/sorting purpose and no filler. The opening is a fragment rather than a full sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return value structure needn't be explained, and the description covers filtering, sorting, and the data-masking caveat. The main gap is the failure to distinguish this from late_work_orders, which is the most likely selection error for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, so the schema documents most parameters including the Hebrew status enum values and ISO date formats. The description merely restates the same filter fields (status, line, product, due dates) without adding format or boundary detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific resource (work orders) plus the filter dimensions (status, line, product, due-date range) and the sort order, which is more than a bare tautology. However, it does not differentiate itself from the sibling late_work_orders, which appears to be a closely related view an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives, despite a directly competing sibling (late_work_orders) existing. The filtering capabilities imply a use case but the agent is left to infer when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_alertsARead-only
Materials at or below their reorder point, with days of cover, whether they will run out before a new delivery can arrive (lead time), and a suggested order quantity. Most urgent first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond that: the result is sorted most-urgent-first, and the 'will they run out before a new delivery can arrive' logic explains how lead time is factored into the alert.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core condition (at/below reorder point) and then appends the derived fields, plus a short ordering note. No filler, no repetition of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, an output schema present, and readOnlyHint set, the description needs only to orient the agent, which it does well. It slightly underspecifies scope (all materials vs. a subset, freshness of the data), but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics for the description to explain; the baseline for a parameterless tool is 4. The schema is empty and fully consistent with the description's implication that the tool returns a global alert list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (materials at or below reorder point) and states exactly what the tool reports, including the computed fields. It is unambiguous against siblings such as machine_oee or downtime_pareto, but it never explicitly distinguishes itself from adjacent supply-chain tools like late_work_orders or get_work_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool to call when it wants reorder/exhaustion risk, and the 'most urgent first' ordering hints at triage use. There is no explicit statement of when to prefer this over siblings or when it does not apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
late_work_ordersARead-only
Orders past their due date and not completed (most late first), plus orders due within
horizon_days that have not started or are waiting for material. Default as_of: the day after the
last production record.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ISO date YYYY-MM-DD | |
| horizon_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, so the description carries the rest of the burden: it discloses output ordering ('most late first') and resolves the real default for as_of ('the day after the last production record'), which the schema leaves as null. It does not mention result limits or pagination behavior, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the primary result set and followed by the forward-looking complement and the default. Efficient overall, though the backtick-formatted parameter references make it slightly denser than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only filtered query with an output schema already defining return shape, the description covers scope, ordering, and defaulting behavior adequately. The remaining gap is that result-count or truncation behavior is never mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (horizon_days has no schema description), and the description compensates by explaining horizon_days as the forward-looking due-date window and by supplying the effective default for as_of that the schema omits. It adds no detail on boundaries or the unit relationship, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines the exact result set: orders past due and incomplete, plus orders due within horizon_days that haven't started or are waiting on material. That specificity implicitly separates it from the broader get_work_orders sibling, but no sibling is named explicitly, so it falls short of the 5 bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scope definition (this is the 'late and at-risk' view rather than a general order listing), but there is no explicit statement of when to prefer this over get_work_orders or how the two complement each other. Nothing misleading, but nothing that routes the agent either.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsARead-only
List the available tables with row counts, date coverage and which columns are masked. Call this first when you do not know the data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context by disclosing what the listing surfaces (row counts, date coverage, masked columns), which matters for a discovery tool, but says nothing about result size or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: capability first, then the call-first routing cue. No filler, and the most actionable instruction is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail need not live in the description, and for a zero-parameter read-only discovery tool nothing an agent needs is missing. The description supplies exactly the orientation cue required to start a session.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is no parameter semantics to document; the baseline for a parameterless tool is 4. The description correctly adds no redundant parameter chatter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (available tables/datasets) and even previews the return payload: row counts, date coverage, and masked columns. That framing clearly distinguishes it from data-returning siblings like search_records, get_work_orders, and scrap_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: "Call this first when you do not know the data." That tells the agent when to reach for it instead of the other siblings, though it names no concrete alternative for the case where you already do know the data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machine_oeeARead-only
Overall Equipment Effectiveness (OEE = availability x performance x quality) for a period, grouped by machine, line, day or shift. Results by machine are sorted worst first.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Production line | |
| date_to | No | ISO date YYYY-MM-DD | |
| group_by | No | machine | |
| date_from | No | ISO date YYYY-MM-DD | |
| machine_id | No | Machine id, for example CNC-05 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description still adds genuine behavioral context beyond that: the OEE formula for interpreting the number, and the non-obvious ordering rule that results are sorted worst first by machine. It does not disclose default date-range behavior when date_from/date_to are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler; the metric definition and grouping are front-loaded before the result-ordering note. Efficient, though the parenthetical formula is the only elaboration offered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers metric meaning, grouping grain, and result ordering. The main gap is the behavior when all filter parameters are left at their null defaults (e.g., what time window is assumed).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents line, date_from, date_to, and machine_id formats. The description only echoes the group_by options and the date scoping ('for a period'), adding no syntax or default details beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific metric (OEE, with its formula spelled out as availability x performance x quality) and the resource scope, plus the grouping dimension. An agent knows exactly what is computed and at what grain, though it never distinguishes itself from siblings like production_kpis or downtime_pareto.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The description never says to prefer this over production_kpis (general KPIs) or downtime_pareto (loss breakdown), nor when each group_by choice is appropriate. Usage is only inferable from the metric name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
production_kpisBRead-only
Management summary for a period, compared with the previous period of the same length: OEE and its three factors, good and scrap parts, unplanned downtime hours with the top reasons, on-time delivery, open late orders and materials below reorder point.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | ISO date YYYY-MM-DD | |
| date_from | No | ISO date YYYY-MM-DD |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered, and the description adds a genuinely useful behavioral trait not in the structured data: results are compared against the previous period of the same length. It does not mention default/omitted date behavior or any rate/permission constraints, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with 'Management summary for a period,' with no wasted words. The metric list is long but each item earns its place by scoping the result set. Slightly list-heavy but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained, and annotations cover the read-only nature. The gap is that both parameters default to null and the description never states what period is used when dates are omitted, which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description adds no detail about date formatting, defaults, or what period is assumed when the nullable dates are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a rolled-up management summary spanning OEE, quality, downtime, delivery and inventory — a specific composite resource. However, it never names the overlapping siblings (machine_oee, downtime_pareto, scrap_summary, late_work_orders) to explain how it differs from them. A clear purpose, but no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, despite four sibling tools covering overlapping metrics. The agent must infer on its own whether to call this composite summary or the individual metric tools. Only implied usage is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrap_summaryARead-only
Scrap quantity and scrap rate for a period, grouped by reason, machine or product.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | ISO date YYYY-MM-DD | |
| group_by | No | reason | |
| date_from | No | ISO date YYYY-MM-DD |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the description only needs to add aggregation context, which it does by naming the grouping dimensions. It does not disclose the effect of omitted date bounds (both default to null) or the default grouping, so a mutation-free but behaviorally thin addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the metric front-loaded and the grouping options trailing. No filler, though it is a verbless fragment rather than a fully formed instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained. For a 3-parameter read-only aggregation with an enum and documented date patterns, the description is nearly sufficient; only the null date defaults and default grouping are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% and both date parameters are documented with ISO format in the schema itself. The description restates the group_by enum values, which is largely redundant with the structured enum, and adds no explanation of default behavior or how grouping changes the returned rows. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (scrap quantity and scrap rate) and the dimensions over which it aggregates (reason, machine, product), which is enough to separate it from siblings like machine_oee and downtime_pareto. It never names an alternative tool, but the resource is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a period' and the list of grouping options imply the usage context, but there is no explicit when-to-use/when-not guidance and no mention of how this differs from other analytics siblings such as production_kpis. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsARead-only
Free-text search (substring, case-insensitive) across record fields, for questions like 'what happened with WO-26017' or 'anything about coolant'. Masked columns are not searched.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| table | No | Limit the search to one table |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already declares this a safe read, but the description adds real behavioral detail beyond that: substring matching, case-insensitivity, and the important security exclusion that masked columns are not searched. This is meaningful context an agent cannot derive from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the core mechanism and then supply examples and the exclusion. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained, and the description covers matching semantics and the masked-column exclusion well. Minor gaps remain around the limit and table parameters, but nothing essential for calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% — the table parameter is documented in-schema, but query and limit have no descriptions. The description clarifies the query's matching semantics (substring, case-insensitive) and its scope (not masked columns), but says nothing about the limit or table parameters, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (free-text search) and resource (record fields) with concrete mechanics (substring, case-insensitive) and two example queries that make the scope immediately tangible. An agent can tell this apart from the analytical siblings (downtime_pareto, machine_oee) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'for questions like ...' examples give clear positive usage context, showing exactly the kind of exploratory lookup this tool serves. However, it never states when NOT to use it or names an alternative sibling for structured retrieval.
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.
10 tool updates
v0.1.0- First observed
downtime_events - First observed
downtime_pareto - First observed
get_work_orders - First observed
inventory_alerts - First observed
late_work_orders - First observed
list_datasets - First observed
machine_oee - First observed
production_kpis - First observed
scrap_summary - First observed
search_records
TDQS
Scored across 10 tools
Tools mostly target distinct analytical areas (inventory, OEE, downtime, scrap, work orders), but get_work_orders and late_work_orders have overlapping scope, and production_kpis overlaps with component tools like machine_oee and downtime_pareto. Descriptions help clarify boundaries, reducing confusion.
Mixed conventions: some tools use verb_noun (list_datasets, search_records, get_work_orders) while others are noun phrases (inventory_alerts, production_kpis, machine_oee, downtime_pareto, downtime_events, scrap_summary, late_work_orders). All are snake_case and readable, but the lack of a consistent verb pattern reduces predictability.
10 tools is well within the typical 3-15 range for a domain-specific analytics server. Each tool provides a distinct analytical view, and there is no obvious redundancy or bloat.
The server covers key factory-floor analytics: dataset discovery, inventory alerts, production KPIs, OEE, downtime, scrap, and work orders. Minor gaps exist, such as no dedicated tool for raw production records or quality inspections beyond scrap, but core workflows are well supported.
Maintenance
Related MCP Connectors
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
- RumboOAuthcom.rumboar
Securely query and analyze business data, dashboards, projections, alerts, and knowledge.
Connect your ads, shop, analytics, social, CRM and finance platforms once, then let Claude, ChatGPT, Cursor or any MCP client read, join and explain your numbers. Public statistics from the World Bank, IMF, Eurostat, OECD, WHO and SEC filings come as context, searchable and chartable from the same tools. Read-only by design, every number carries its source.
Related MCP Servers
- AlicenseAqualityDmaintenanceBridges Claude (or any MCP client) to manufacturing data via the i3X standard, enabling natural language queries about equipment status, hierarchy, and historical trends.126 npm2MIT
- FlicenseNot gradedqualityCmaintenanceEnterprise-safe MCP server that enables Claude Enterprise to access approved on-prem SQL Server data through read-only, governed, and auditable tools.-
- AlicenseNot gradedqualityBmaintenanceProvides read-only, guarded access to business databases via MCP. Enables natural language querying with built-in security barriers like table allowlists, PII masking, and audit logging.MIT
- FlicenseNot gradedqualityBmaintenanceEnables authorized Energi-Up staff to query KLIP data in natural language through Claude, strictly read-only, without opening the application.28 npm-