koble-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EBMS_SANDBOX | No | Optional company ID to restrict writes to only that company (for testing). | |
| EBMS_LOG_FILE | No | Optional path to a log file for request logs. | |
| EBMS_PASSWORD | Yes | The EBMS password. | |
| EBMS_USERNAME | Yes | The EBMS username. | |
| EBMS_COMPANIES | No | Optional comma-separated list of company IDs to narrow access (default: all companies the serial reaches). | |
| KOBLE_OUTPUT_DIR | No | Directory for MRP worksheets. Defaults to Documents/Koble MRP. | |
| EBMS_COF_PASSWORD | No | Optional per-company password. | |
| EBMS_COF_USERNAME | No | Optional per-company username. | |
| EBMS_SERIAL_NUMBER | Yes | The EBMS serial number. | |
| EBMS_ALLOWED_COMMANDS | No | Comma-separated list of allowed commands. Default: MarkAllAsShipped,RecalculateAllPrices,CalculateFreight,ChangeCustomer. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ebms_companiesA | List the companies (datasets) this server can reach on its EBMS serial number, with name, ID, version and whether writes are allowed. Needs no credentials. Call it when the user names a company you haven't seen, or before the first write of a session, so the company is confirmed by name. Nothing marks a company as live or a test copy; ask if unsure. |
| ebms_getA | Read from EBMS OData: a collection (path 'ARINV') or one record (path "ARINV('')"). Always pass select — an unselected read returns every field, many computed, and large ones hit the 2-minute limit. For a collection, count is on by default and the result says whether rows were truncated. For more than a few hundred rows use ebms_export instead: without top only 200 rows are shown, and never more than about 150 KB. Query syntax and the install's quirks are in the ebms-api skill. |
| ebms_writeA | Write to EBMS: POST creates a record (documents take their lines nested as Details), PATCH updates one by quoted AUTOID (lines via a Details@delta array), DELETE removes one. Refused for a company that is not configured (or not the sandbox, while testing), and refused if the body carries PROCESS anywhere, a POST's EXTERNALID already exists (orders, POs, batches, tasks, customers, vendors, products, workers), or a vendor (APVENDOR) POST has no ID. A 2xx is not proof — EBMS silently ignores unknown @ids and unwritable fields — so the server reads back the fields you sent and returns a verification: ok, mismatches (sent vs stored), problems (a row that never appeared or was not removed), notes (rows EBMS added itself) and the stored rows. Treat ok:false as a partly failed write and tell the user. If the result says uncertain, read back before resending — a resent create or add duplicates; a create resent by EXTERNALID is refused until a read finds it or confirms it is absent. |
| ebms_commandA | Run a bound action on one record: POST /ENTITY('')/Model.Entities.. Omit body for a command with no dialog (MarkAllAsShipped, RecalculateAllPrices) — EBMS rejects even {}. Pass the dialog's fields for one that has a dialog (ChangeCustomer). Refused for a company that is not configured (or not the sandbox, while testing), and for any action that is not on the server's short allow-list — nothing that posts, processes, pays or sends. Commands return little; read the record back afterwards. |
| ebms_exportA | Read a whole EBMS collection to a file (CSV, Excel or JSONL) instead of into the conversation, for anything more than a few hundred rows: sales history, every product, all open lines. The server pages through it itself and returns only the file's path, the row count, the columns, five sample rows and min/max/sum of each numeric column — never the rows. Analyse the file with a script (pandas, duckdb) and read back only the aggregates; never write a script that calls EBMS. Count first with ebms_get (top 1). Select only the fields you need. Read-only. |
| mrp_planA | Material requirements plan for one company, read-only: nets open sales and job demand, open manufacturing batches and open purchase orders against stock, day by day, through the bill of materials, and returns what to buy and make, by when, and why. ALWAYS ask the user two things first and never assume either: the time frame (through, or days) — 'buy and make what is needed to cover everything due by this date' — and the scope: everything, particular vendors, or particular products. Lead times come from EBMS: the product's vendor record (INVENDOR.LEAD_DAYS), else the vendor's (APVENDOR.LEAD_DAYS); 0 means not set. A purchase with a lead time gets an order-by date; one without carries only its needed-by date. Pass leadTimes or leadTimeDays only for figures the user gives. Only stocked products and stocked lines are planned; drop-ship, associated and sync lines belong to their own orders. The planner's worksheet is an Excel workbook saved on this computer (worksheet.savedAt): give the user that path; they approve rows in it. A CSV copy of its rows is attached for reading only. |
| mrp_item_viewA | The total view of one finished good, read-only: everything needed to build a quantity of it, down every level of its bill of materials, against what is available (on hand + incoming − on order). Stock of a sub-assembly covers its branch before anything is exploded further, and a part used in two branches is only counted once. Returns an indented tree, what to make, what to buy, and canBuildWithoutBuying: true when every purchased part is available, even if sub-assemblies still have to be made from them. |
| po_from_csvA | Turn an approved MRP worksheet into purchase-order drafts, read-only. Reads the worksheet mrp_plan produced (its Excel workbook, or a CSV), after the planner approved BUY rows on its To order tab (and perhaps changed Qty or Vendor); checks every vendor and product against EBMS; and returns one draft per vendor with the exact body to POST to APINV with ebms_write. It creates nothing. A worksheet handed in twice cannot order twice: ebms_write refuses the duplicate EXTERNALID. Show the drafts and get a clear yes per purchase order before writing. |
| batches_from_csvA | Turn approved MAKE rows of an MRP worksheet into manufacturing-batch drafts, read-only. For each it checks EBMS will accept the product as a finished good (it must be classified Track Count), lists every component from the bill of materials with its quantity per one finished good (EBMS does NOT add consumed materials itself when a batch arrives through the API), picks the warehouse (the one given, else where the product was last made), and returns the exact body to POST to INMFG with ebms_write. It creates nothing. Drafts mark nothing as made or consumed and never carry PROCESS: finishing and processing a batch is done by a person in EBMS. Show each draft and get a clear yes before writing it. |
| import_from_csvA | Review a CSV or Excel (.xlsx) file of records for one EBMS entity — products, units, vendor records, bills of materials, customers, vendors, workers, folders, tax rates or other configuration — and draft the writes, read-only. Maps each column to a field (from EBMS's live metadata), checks every row (blanks, types, lengths, duplicates, folders, vendors, products and units that do not exist), skips rows already in EBMS or already created by an earlier run of the same import, writes an exceptions workbook holding only the rows that need fixing, and returns the exact ebms_write call for each remaining row. It writes nothing to EBMS. Follow the ebms-import skill: show the mapping, problems and a few drafts, get one clear yes for the file, then call ebms_write for each draft in order. Run it again on the same file (or the corrected exceptions file) to continue: what was created is skipped. |
| ebms_guideA | The procedures for working with EBMS through this server: how to build and change sales orders and purchase orders, receive stock, manage products, customers, vendors and tasks, run MRP, import files and set up a new company. Call it before any task beyond a single read, unless the matching skill is already loaded in this app. With no arguments it lists the skills; with skill it returns that skill; with file it returns one of the skill's reference files. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| mrp-plan | Plan purchasing and production for a time frame, and get a worksheet to approve. |
| mrp-purchase-orders | Turn the BUY rows approved on an MRP worksheet into purchase orders, one confirmed at a time. |
| mrp-batches | Turn the MAKE rows approved on an MRP worksheet into manufacturing batches. |
| sales-order | Enter a new sales order, or change or ship an existing one. |
| purchase-order | Raise a purchase order for a vendor, or change an existing one. |
| receive | Record what arrived against a purchase order. |
| on-order | Show open purchase orders, for everything or one vendor. |
| product | Create a product, or change one's price, cost, units or vendor records. |
| customer | Add a customer, or change one's address, phone, email, folder or price level. |
| vendor | Add a vendor, or change one's address, contact, lead days or folder. |
| task | Raise a task or work order, assign it, move it along, book time or close it. |
| task-reflow | Re-plan the tasks in a date range so each worker's day fits working hours with no overlaps; shows the plan first and can undo it. |
| new-company | Set up an empty EBMS company: configuration, folders, vendors, products, customers and workers, in the order they depend on each other. |
| import | Review a CSV or Excel file against EBMS, get an exceptions file with only the rows to fix, and create the rest after one yes. |
| import-products | Load a product list (CSV or Excel) into EBMS, checking every row first. |
| import-customers | Load a customer list (CSV or Excel) into EBMS, checking every row first. |
| import-vendors | Load a vendor list (CSV or Excel) into EBMS, checking every row first. |
| review-spreadsheet | Check a CSV or Excel file against EBMS and list only the rows that need fixing. Nothing is written. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Most tools occupy clearly separated niches: ebms_get vs ebms_export is explicitly split by size/side-effects, ebms_write is the sole mutator while po_from_csv/batches_from_csv/import_from_csv are read-only drafters, and mrp_plan vs mrp_item_view split company-wide planning from a single BOM tree. The remaining fuzziness is among the three '*_from_csv' drafters (worksheet BUY rows, MAKE rows, arbitrary entity files), which an agent must read carefully to pick correctly, and ebms_get vs ebms_export overlap in a grey zone of 'a few hundred rows'.
All names are lower snake_case and cluster into readable prefixes (ebms_*, mrp_*, *_from_csv), so the set is predictable. It is not a single uniform verb_noun pattern though: ebms_get/ebms_write/ebms_export are prefix+verb, while po_from_csv/batches_from_csv/import_from_csv use a source-oriented noun_from_source form, and mrp_item_view adds a third shape.
Eleven tools is well inside the healthy range and each one earns its place: read, write, bulk export, plan, per-item view, three drafters for distinct sources, command, guide and company listing. No obvious filler or overlapping convenience wrappers.
The surface covers the full lifecycle: discovery (ebms_companies, ebms_guide), read/aggregate (ebms_get, ebms_export), mutation (ebms_write, ebms_command), planning (mrp_plan, mrp_item_view) and bulk intake (three drafters). The main gap is introspection — there is no tool to list entity metadata/fields or allowed commands directly, so an agent must go through ebms_guide's reference files to learn valid paths and the command allow-list.