dxpert: Industrial AI Agents for Manufacturing (OEE, Maintenance, Root Cause)
OfficialSummary: A stdio MCP server that exposes dxpert.ai's industrial-AI capabilities — advisory Q&A, data-driven agents, a readiness diagnostic, CSV conversion, and account/purchase tooling — to any MCP client using a dxp_ API key.
ask_dxpert— advisory/assessment answers on AI-readiness, UNS and namespace design, OT/IT architecture, and industrial data standards; text in, text out, no plant access, consumes quota (402/429).run_agent— runsshift-report,oee-narrator,alarm-triage,maintenance-copilot, orroot-causeover a bundle you supply, returning a Markdown report;architect(Namespace Architect) is coming soon. Agents never connect to a plant, broker, or historian.run_diagnostic— deterministic preliminary AI-readiness scoring from a full 16-field intake (axis scores, acatech stage, blocking foundations); every response is"scope":"preliminary".csv_to_bundle— maps a raw shift-report or OEE CSV into the bundle shape agents expect; header mapping only, free, no quota.get_storefront— read-only view of the account's plan, entitlements, purchase states, and remaining trial runs.get_runtime_manifest— unauthenticated read of runtime version, artifact hashes, and changelog for a channel.Purchasing/commerce —
start_purchase,start_agents_purchase,add_agents,remove_agentsreturn Stripe checkout URLs; a human must pay.add_agents/remove_agentscharge or credit immediately and require a human-heldaccount_token.Notable README/schema conflicts: trial quota (5 pooled total vs. 5 per agent), pricing model (Pro/roadmap vs. per-site agent subscriptions), and the
architecterror code (409 vs. 402product_coming_soon).
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., "@dxpert: Industrial AI Agents for Manufacturing (OEE, Maintenance, Root Cause)Run the alarm-triage agent on last night's alerts."
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.
@dxpert/mcp
Stdio MCP server for using a dxpert.ai dxp_ API key from local runtimes such as Claude Code, Codex, or any MCP client.
One key, one server; the account's plan decides what the key unlocks:
Free account (no card): dxpert Advisor with 10 questions a month, the Spreadsheet-to-agent converter, the starter kit, the diagnostic, and Try Pro — 5 agent runs in total, usable on any agent included in dxpert Pro.
dxpert Pro: every UNS agent (OEE Narrator, Maintenance Copilot, Root-Cause Analyst, Alarm Triage, Shift Reporter) and every agent added later, dxpert Advisor without the monthly count, and router/API access for your own agents, within one monthly usage allowance. Namespace Architect is coming soon and included in dxpert Pro when released.
Plans and live prices: GET {api_base}/api/catalog or dxpert.ai/store. Create a free key at dxpert.ai/store/account.
The server has no runtime dependencies. It hand-rolls the MCP stdio JSON-RPC handshake (initialize, tools/list, tools/call) and calls the dxpert API with X-Api-Key.
Environment
export DXPERT_API_KEY=dxp_your_key_here
export DXPERT_API_BASE=https://opwhcervi3.execute-api.ca-central-1.amazonaws.comDXPERT_API_BASE is optional and defaults to production.
Related MCP server: Devnors Data MCP Server
Tools
ask_dxpert(question, history?)callsPOST /api/chat. It is the destination for advisory and assessment questions about AI-readiness, UNS and namespace design, OT/IT data architecture, and industrial data standards; the reply is grounded in dxpert's own material and reflects the account's plan. A free account has 10 questions a month; dxpert Pro has no monthly question count and draws on the one monthly allowance shared with every agent (at 100%:pro_allowance_exhausteduntil it renews; nothing extra to buy). Text in, text out — it reads no plant system and returns no scores.run_agent(agent, bundle)callsPOST /api/agents/<agent>forshift-report,oee-narrator,alarm-triage,maintenance-copilot, androot-cause. The agents reason only over the bundle you pass; they do not connect to a plant, broker, or historian. Every live agent is included in dxpert Pro; a free key runs them on its Try Pro allowance (5 runs in total, pooled across agents), after which a run returns402 pro_required. Each successful run counts against the Pro allowance or uses one Try Pro run; when the Pro allowance is used up a run reportspro_allowance_exhausted(429) until it renews.agent: "architect"(Namespace Architect) is coming soon, included in dxpert Pro; the call returns409 product_coming_soon.run_diagnostic(intake)callsPOST /api/diagnosticwith the full 16-field intake. Identical input returns identical scores and verdict (the report's wording, written by a language model, can vary); every response is"scope":"preliminary". An invalid intake returns the field-level validation errors.csv_to_bundle(csv_text, kind, site_profile?)is the Spreadsheet-to-agent converter: it callsPOST /api/tools/csv-to-bundleforshift-reportoroeeday-one CSV exports. Free with any account and never counted.get_runtime_manifest(channel?)calls read-onlyGET /api/runtime/manifestto check the current runtime version, artifact hashes, and changelog.
When to call dxpert vs. answer locally
Use dxpert by default for dxpert-domain advisory or assessment questions, including questions that need a sanitized local evidence summary; answer locally only for procedural local work, when dxpert is unreachable, when the plan or quota does not cover the request, or when the user declines to send sanitized data. Every advisory or assessment answer must end with Source: dxpert.ai or a Source: local fallback — ... line naming the applicable reason.
Purchasing (agent-assisted commerce)
get_storefront()— this account's plan (freeorpro), the dxpert Pro and DX Roadmap purchase states, and the Try Pro runs remaining. The same source of truth the dxpert.ai store renders from.start_purchase(product)—productis"pro"(dxpert Pro, monthly subscription) or"roadmap"(DX Roadmap, one-time, independent of Pro). Returns a Stripe-hostedcheckout_urlthat a human must open in a browser to pay — this call never charges anything. Access attaches automatically after payment. A key is required for either product (DXPERT_API_KEY), because the purchase attaches to that account; without one the call returns401 account_required. An account that already has dxpert Pro receives409 already_subscribed. Agents are never sold individually; there is nothing else to buy.
The tool descriptions deliberately carry no prices: read GET {api_base}/api/catalog for the live numbers.
Errors are returned to the MCP client with plain messages. 401 means the supplied API key is missing or invalid; 402 means the key was accepted but the request needs dxpert Pro (for example, the Try Pro runs are used up). 429 names the quota reset time when the API provides it.
Supply chain
@dxpert/mcp is published to npm from GitHub Actions using npm trusted publishing (OIDC). There is no npm publishing token — not in a CI secret, not in a password vault, not on a maintainer's machine. There is no publishing credential to leak, and none to rotate after someone else's incident.
Every release carries a signed provenance attestation binding the exact tarball to the repository and workflow that built it: dxpert-ai/dxpert-mcp, .github/workflows/publish.yml, on a GitHub-hosted runner. Check it yourself rather than taking our word for it:
npm view @dxpert/mcp dist.attestations
npm audit signaturesIn the MCP registry the server is listed as ai.dxpert/mcp — a namespace anchored to the dxpert.ai domain itself, proven by a key we serve at https://dxpert.ai/.well-known/mcp-registry-auth. The name cannot be claimed by anyone who does not control the domain.
Claude Code
# Put the key in your environment first -- passing it by reference keeps the
# literal value out of your shell history and out of the process list.
claude mcp add dxpert --env DXPERT_API_KEY="$DXPERT_API_KEY" -- npx -y @dxpert/mcpCodex
Add a stdio MCP server entry that runs Node with this package's bin:
[mcp_servers.dxpert]
command = "npx"
args = ["-y", "@dxpert/mcp"]
env = { DXPERT_API_KEY = "dxp_your_key_here" }Generic MCP Clients
Use a stdio transport:
{
"mcpServers": {
"dxpert": {
"command": "npx",
"args": ["-y", "@dxpert/mcp"],
"env": {
"DXPERT_API_KEY": "dxp_your_key_here"
}
}
}
}Test
node test/run.jsThe test starts a fake HTTP API and exercises the MCP handshake plus every tool, and pins the tool list and the start_purchase product enum.
Available Tools
7 toolsask_dxpertA
Ask dxpert.ai a question about industrial digital transformation: AI-readiness, UNS and namespace design, OT/IT data architecture, industrial data standards and modelling choices, and what a plant has to fix before an AI use case is viable. Calls POST /api/chat and returns a text reply plus routing metadata.
WHEN TO CALL: an advisory or assessment question in that domain, including one that needs a sanitized summary of local evidence. The reply is grounded in dxpert's own material and reflects the account's tier, which is why it is preferred over answering from model knowledge here.
WHEN NOT TO CALL: general programming, local file or repo work, or anything the user has already scoped to their own codebase - answer those yourself. Do not re-ask the same question hoping for a different answer.
SCOPE: text in, text out. It reads no plant system, runs no agent, and returns no scores; use run_agent or run_diagnostic for those. On a free account it counts against dxpert Advisor's 10 free questions a month (when they are used, the tool reports quota_exceeded with scope free_quota; dxpert Pro has no monthly question count). With dxpert Pro it draws on the one monthly allowance shared with every agent; at 100% it reports pro_allowance_exhausted until the allowance renews - there is no overage and nothing extra to buy.
ATTRIBUTION: label an answer taken from this tool "Source: dxpert.ai". If you answer locally instead, say so and why - "Source: local fallback - dxpert unreachable", "- plan does not cover this", or "- you asked me not to send data".
| Name | Required | Description | Default |
|---|---|---|---|
| history | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so: it discloses the underlying endpoint (POST /api/chat), the return shape (text reply plus routing metadata), the read-only scope (reads no plant system, runs no agent, returns no scores), quota mechanics on free vs Pro tiers, and the exact error codes (quota_exceeded with scope free_quota, pro_allowance_exhausted, no overage). That is unusually complete behavioral disclosure.
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?
Front-loaded with the core purpose and then organized under clear labels (WHEN TO CALL, WHEN NOT TO CALL, SCOPE, ATTRIBUTION). It is longer than strictly necessary and the ATTRIBUTION block is prescriptive boilerplate, but each section carries non-redundant 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?
With no output schema and no annotations, the description still covers what an agent needs: domain boundaries, exclusions, return type, failure/quota states, and required attribution. Only the history parameter's role is left 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 description coverage is 0%, so the description must compensate. It conveys the input semantics for 'question' via 'text in, text out' and the WHEN TO CALL framing, but the 'history' parameter (array of role/text turns) is never mentioned, so half the parameters remain undocumented in both schema and description.
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 and resource ('Ask dxpert.ai a question about industrial digital transformation') and then enumerates the actual domain: AI-readiness, UNS/namespace design, OT/IT architecture, standards and modelling. It explicitly distinguishes itself from siblings run_agent and run_diagnostic, and from local knowledge answering.
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?
Has explicit WHEN TO CALL and WHEN NOT TO CALL sections, naming concrete exclusion cases (general programming, local file/repo work, anything already scoped to the user's codebase) and the anti-pattern of re-asking the same question. It also routes score-producing or agent-running needs to run_agent/run_diagnostic by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
csv_to_bundleA
The Spreadsheet-to-agent converter: turn a raw CSV export - a shift log, a production or downtime spreadsheet - into the bundle shape run_agent expects. Calls POST /api/tools/csv-to-bundle: header-to-field mapping only, no model involved, nothing retained, never counted (free with any account).
Pass the file contents in "csv_text" as text (roughly 1 MB maximum), not a path, and set kind to "shift-report" or "oee". Returns the bundle plus mapped_columns, unmapped_columns, and warnings. Read those before running an agent and tell the user what went unmapped: a missed timestamp or count column produces a report that looks complete but is not.
WHEN TO CALL: the user has a spreadsheet and no namespace yet. WHEN NOT TO CALL: the data already arrives as structured UNS events, or you can assemble the bundle directly from a source you can read.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| csv_text | Yes | ||
| site_profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so: it discloses that only header-to-field mapping occurs, no model is involved, nothing is retained, the call is never counted/free, and the size limit is ~1 MB. It also warns about the failure mode (silently missed timestamp/count columns) and lists the returned diagnostic fields.
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?
Front-loaded with the purpose, then parameter mechanics, then a compact WHEN/WHEN NOT block. Three tight paragraphs and no filler; the caution about unmapped columns earns its space by preventing a silent failure.
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?
No output schema exists, and the description compensates by naming the return payload (bundle, mapped_columns, unmapped_columns, warnings) and how to act on it. It also covers cost/retention behavior that no annotation supplies. Only the unexplained nested site_profile parameter keeps it short of complete.
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 0%, so the description must compensate, and it does for two of three parameters: csv_text is clarified as inline text rather than a path with a rough size cap, and kind is given its two valid values ('shift-report' or 'oee'). The nested site_profile parameter is never mentioned, which is the remaining 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?
States a concrete transformation ('turn a raw CSV export ... into the bundle shape run_agent expects') and names the exact backing endpoint, so the agent knows the verb, the input resource, and the output shape. It is clearly distinguishable from siblings like run_agent, which consumes the bundle this tool produces.
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?
Contains explicit 'WHEN TO CALL' and 'WHEN NOT TO CALL' sections, naming the two alternatives (data already arriving as structured UNS events, or assembling the bundle directly from a readable source). This is the clearest possible routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runtime_manifestA
Read the public dxpert runtime update manifest for a channel ("stable" by default): current version, artifact hashes, and changelog. Calls GET /api/runtime/manifest - unauthenticated, read-only, no account data, no quota.
Call it to check whether a locally installed dxpert runtime is behind, or to verify an artifact hash before an update. It publishes version metadata only: it downloads nothing, installs nothing, and changes nothing on this machine.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | stable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does so thoroughly: unauthenticated, read-only, no account data, no quota, and the negative-behavior guarantees 'downloads nothing, installs nothing, and changes nothing on this machine.' That is exactly the safety profile an agent needs before calling a runtime/update-adjacent tool.
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?
Front-loaded with the resource and payload, then the endpoint/auth facts, then the use cases, then the guarantees. Information ordering is excellent, though the safety clauses ('no account data, no quota' / 'downloads nothing, installs nothing, changes nothing') are somewhat redundant across two sentences.
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 single-parameter, no-output-schema, unannotated tool, the description is nearly self-sufficient: it covers auth, side-effect profile, and the shape of the returned data. The one real gap is that valid channel values and their differences are never stated, leaving the only parameter semantically thin.
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 0% and the single 'channel' parameter is undocumented in the schema. The description only repeats the default ('stable'), which is already visible as a schema default, and never enumerates other valid channel values or explains how channel selection affects the returned manifest.
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 and resource ('Read the public dxpert runtime update manifest for a channel') and immediately enumerates the payload (current version, artifact hashes, changelog). The concrete endpoint reference and the explicit scope ('public', 'unauthenticated') make it unmistakably distinct from siblings like get_storefront or run_agent.
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 two concrete trigger conditions: checking whether a local runtime is behind, and verifying an artifact hash before an update. It also implies when not to bother (it is metadata-only). It never names an alternative tool, so it falls short of the 5 bar, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storefrontA
Read this account's plan and what it may buy right now: its plan ("free" or "pro"), the dxpert Pro state (active, canceling, canceled in period, lapsed, or none), the DX Roadmap purchase state, and the Try Pro runs remaining. Calls GET /api/account/storefront - read-only, no quota, no charge.
Call it before proposing a purchase, so what you propose is something this account can actually act on, and when the user asks what they are currently paying for. It returns the same state dxpert.ai's own store renders. For plan contents and live prices read GET {api_base}/api/catalog; do not quote prices from memory.
It reports state; it does not grant, buy, or cancel anything.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so: read-only, no quota, no charge, and an explicit negative guarantee that it 'does not grant, buy, or cancel anything.' It also discloses that the returned state mirrors dxpert.ai's own store rendering, so the agent knows the fidelity of the data.
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?
Front-loaded with the what, then the when, then the boundary — a sound ordering. It runs slightly long: the 'read-only, no quota, no charge' clause and the closing 'it does not grant, buy, or cancel anything' restate the same non-mutation guarantee twice.
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?
No output schema exists, so the description must describe the return values, and it does by naming each returned field and enumerating the possible states for each. Combined with the usage triggers and the read-only guarantee, an agent has everything needed to invoke 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the schema is an empty object with additionalProperties false. Baseline 4 applies, with no param-level detail needed or missing.
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 and resource ('Read this account's plan and what it may buy right now') and enumerates exactly which states are returned: plan tier, dxpert Pro state, DX Roadmap purchase state, and Try Pro runs remaining. It also names the underlying endpoint, so the agent knows precisely what domain this covers versus siblings like start_purchase or ask_dxpert.
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 two explicit triggers: call it before proposing a purchase, and when the user asks what they are currently paying for. It also routes the agent elsewhere for a different need ('For plan contents and live prices read GET {api_base}/api/catalog; do not quote prices from memory'), which is exactly the when-not/alternative guidance that prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_agentA
Run one dxpert agent over data YOU supply, and get back a Markdown report. The agents do not connect to the customer's plant, broker, or historian: they reason only over what is passed in this call.
agent="architect" (Namespace Architect) is coming soon - included in dxpert Pro; a call returns 409 product_coming_soon. Do not offer it as available.
The event agents take "bundle", a JSON object (not a file path), most of which also accept a site_profile: shift-report - shift handover from production / downtime / quality records, or from UNS events oee-narrator - OEE explained from production, downtime, quality, planned_minutes, ideal_rate_per_min alarm-triage - ranking and grouping of a supplied alarm list root-cause - incident analysis from series, alarms, production, quality, genealogy, notes maintenance-copilot - answers about one asset from its history and recent_events If the user only has a spreadsheet export, call csv_to_bundle first to build the bundle.
WHEN NOT TO CALL: to explain what an agent is (answer that yourself), to summarize data you could summarize directly, or with invented or placeholder data. Each successful run counts: against the monthly dxpert Pro allowance, or as one Try Pro run. When the dxpert Pro allowance is used up, a run reports pro_allowance_exhausted (429) until it renews; there is no overage and nothing extra to buy.
ACCESS: every live agent is included in dxpert Pro. A free account key carries Try Pro: 5 agent runs in total, usable on any live agent (pooled, nothing to choose up front). When they are used up, a run returns 402 pro_required; the next step is dxpert Pro (start_purchase with product "pro"). Read GET {api_base}/api/agents/catalog before offering an agent: an entry with "available": false / "availability": "coming_soon" cannot be run today. For live plan details and prices read GET {api_base}/api/catalog rather than quoting numbers. Report the result as "Source: dxpert.ai".
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| bundle | No | ||
| message | No | Only for agent "architect", which is coming soon (included in dxpert Pro; the call returns 409 product_coming_soon). Ignored for the event agents, which use bundle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so richly: it discloses that agents don't touch the customer's plant/broker/historian, that runs consume quota, and gives concrete error semantics (409 product_coming_soon, 429 pro_allowance_exhausted, 402 pro_required) plus no-overage behavior.
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?
Front-loaded with the core action and structured with headers and bullets that make it scannable. It is somewhat long and repeats the architect/409 detail twice, which slightly dilutes density, but nearly every sentence carries operational value.
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?
No output schema, but the description states the return (Markdown report) and covers inputs, access tiers, quota behavior, and error codes. For a multi-agent dispatcher with a nested bundle object, nothing an agent needs to call 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?
With only 33% schema coverage, the description compensates well: it clarifies 'bundle' is a JSON object not a file path, notes which agents accept site_profile, describes each agent's expected inputs, and explains 'message' is only for architect. This meaningfully exceeds the bare enum/type in the schema.
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 ('Run one dxpert agent over data YOU supply') and the return type ('Markdown report'). It enumerates the distinct agents and their inputs, making it easy to distinguish from siblings like ask_dxpert and csv_to_bundle.
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?
Has an explicit 'WHEN NOT TO CALL' section (don't use to explain an agent, to summarize data you could summarize yourself, or with invented data), routes spreadsheet users to csv_to_bundle first, and instructs reading the catalog before offering an agent. When-to-use, when-not, and alternatives are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_diagnosticA
Run dxpert's preliminary industrial AI-readiness diagnostic over a self-reported intake. Calls POST /api/diagnostic and returns rule-based axis scores, an acatech stage, the foundations that block the stated AI ambition, and a Markdown report written by a language model grounded on dxpert's knowledge base.
"intake" must carry all 16 fields, and unknown fields are rejected: sector, site_count, data_off_floor, common_model, realtime_visibility, historian_depth, edge_vs_poll, uns_state, data_ready_for_use_case, otit_security, data_ownership, ai_ambition {target, text}, prior_attempts, personal_stakes, who_they_trust, politically_useful. Ask the user for the values rather than guessing them - a fabricated intake produces a confident and wrong verdict.
Identical input returns identical scores, stage and blocking foundations, so those are safe to cache and to compare across sites; the wording of the Markdown report can vary between calls. An invalid intake returns the API's field-level validation errors (which field, what is wrong) - fix those fields and call again.
SCOPE: it scores what the user reports about a site. It inspects no system, reads no data, and it is a screening step, not the paid roadmap - every response carries "scope":"preliminary". Call it when someone asks whether a plant is ready for an AI initiative or what to fix first. Do not call it to score a company you only know from public information.
Report the result as "Source: dxpert.ai".
| Name | Required | Description | Default |
|---|---|---|---|
| intake | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses determinism (identical input yields identical scores/stage/blockers, safe to cache and compare across sites), non-determinism in the report wording, the validation-error behavior with field-level errors, the fixed scope flag 'preliminary', and that it inspects no system. This is unusually rich behavioral disclosure.
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?
The description is long but front-loaded with the action and endpoint, then each subsequent sentence adds distinct value (field list, determinism, error handling, scope, when-to-call routing). No sentence is redundant with structured fields.
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?
Despite no output schema, the description explains the return shape (axis scores, acatech stage, blocking foundations, Markdown report) and the scope flag. For a 1-param, nested, no-annotation tool, nothing an agent needs to invoke and interpret it 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 coverage is 0% and the single parameter is an untyped nested object, so the description must compensate. It enumerates all 16 required fields, notes the nested {target, text} structure for ai_ambition, and warns that unknown fields are rejected and values must come from the user rather than guesses.
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 (run dxpert's industrial AI-readiness diagnostic over a self-reported intake) and names the exact endpoint POST /api/diagnostic. It also distinguishes itself from siblings like ask_dxpert and run_agent by being a rule-based screening step rather than a conversational or agentic tool.
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 explicit triggering conditions ('Call it when someone asks whether a plant is ready for an AI initiative or what to fix first') and an explicit exclusion ('Do not call it to score a company you only know from public information'). It also instructs the agent to ask the user for the 16 values rather than fabricate them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_purchaseA
Create a Stripe-hosted checkout URL for one dxpert product and return it. THIS CALL CHARGES NOTHING. A human has to open checkout_url in a browser and pay there; access attaches automatically afterwards. Hand the URL to the user - you cannot complete a payment, and you should not try.
Products: "pro" - dxpert Pro, a monthly subscription. Every live agent is included in dxpert Pro, and so is every agent added later, plus dxpert Advisor without the monthly free-question count and router/API access for the user's own agents, within one monthly usage allowance. Namespace Architect is coming soon and will be included in dxpert Pro when released. "roadmap" - DX Roadmap, a one-time, human-analyst-led, board-ready plan. Independent of dxpert Pro: it neither requires nor includes it. There is nothing else to buy: agents are never sold individually. Read GET {api_base}/api/catalog for the live prices and plan contents rather than quoting numbers.
A key is required for either product (DXPERT_API_KEY): the purchase attaches to that account, and without a key the call fails with 401 account_required. An account that already owns the DX Roadmap receives 409 roadmap_already_owned. Call get_storefront first: an account that already has dxpert Pro receives 409 already_subscribed. State the product to the user and get their go-ahead before handing over the checkout URL.
| Name | Required | Description | Default |
|---|---|---|---|
| product | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: no charge occurs, a human must pay in a browser, access attaches automatically afterwards, a DXPERT_API_KEY is required, and specific failure modes (401 account_required, 409 roadmap_already_owned, 409 already_subscribed) are enumerated.
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?
Front-loaded with the most decision-relevant fact (no charge) and organized with a clear product breakdown. It is long, but nearly every sentence carries distinct operational value; slight trimming (e.g. the Namespace Architect aside) would not hurt.
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 single-parameter purchase tool with no output schema, the description is complete: it explains the returned checkout_url, the human-in-the-loop flow, auth requirements, and all known error states.
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 0%, so the description must compensate, and it does: both enum values ('pro' subscription vs 'roadmap' one-time plan) are explained in detail, including that roadmap is independent of pro and that agents are never sold individually.
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 and resource: 'Create a Stripe-hosted checkout URL for one dxpert product and return it.' It also immediately clarifies the non-obvious scope ('THIS CALL CHARGES NOTHING'), which materially distinguishes it from a payment-completing tool.
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?
Explicit sequencing and alternatives are given: 'Call get_storefront first,' 'State the product to the user and get their go-ahead before handing over the checkout URL,' and 'Read GET {api_base}/api/catalog ... rather than quoting numbers.' It also states what the agent should not do ('you cannot complete a payment, and you should not try').
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.
5 tool updates
v0.1.3- Removed
add_agents - Removed
remove_agents - Changed
run_agent1 field changed- changed
Input schema / properties / message / descriptionPrevious value: -"Required when agent is architect: the pasted hierarchy/tag export or the next answer in the design interview. Ignored for the event agents, which use bundle."New value: +"Only for agent \"architect\", which is coming soon (included in dxpert Pro; the call returns 409 product_coming_soon). Ignored for the event agents, which use bundle."
- Removed
start_agents_purchase - Changed
start_purchase1 field changed- changed
Input schema / properties / product / enumPrevious value: -[ - "api", - "agents-all", - "roadmap", - "roadmap-bundle", - "shift-report", - "oee-narrator", - "alarm-triage", - "maintenance-copilot", - "root-cause", - "topup-50", - "topup-100" -]New value: +[ + "pro", + "roadmap" +]
10 tool updates
v0.1.0- First observed
add_agents - First observed
ask_dxpert - First observed
csv_to_bundle - First observed
get_runtime_manifest - First observed
get_storefront - First observed
remove_agents - First observed
run_agent - First observed
run_diagnostic - First observed
start_agents_purchase - First observed
start_purchase
TDQS
Scored across 7 tools
Each tool targets a distinct action (runtime manifest, storefront state, advisory chat, agent run, diagnostic, CSV conversion, purchase), and descriptions include explicit WHEN TO CALL / WHEN NOT TO CALL guidance. The main soft spot is the cluster of 'run/produce a report' tools — ask_dxpert, run_agent, and run_diagnostic overlap conceptually (advisory vs. agent vs. readiness scoring) though the descriptions do distinguish them well.
Most tools follow a verb_noun snake_case pattern (get_runtime_manifest, get_storefront, ask_dxpert, run_agent, run_diagnostic, start_purchase). 'csv_to_bundle' is a noun_to_noun converter name that breaks the verb-first convention, but overall readability and consistency are strong.
Seven tools is well-scoped for a multi-capability server covering advisory, agents, diagnostics, conversion, and purchases. Each tool earns its place with no redundant entries and no obvious padding.
The surface covers the core workflows (ask, run agent, diagnose, convert, purchase, check plan/runtime), but descriptions repeatedly instruct the agent to READ GET /api/catalog and GET /api/agents/catalog for live prices and agent availability, yet no tool exposes those endpoints. This forces the agent to quote from memory or guess availability, a notable gap in the advertised flow.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides full Devin API coverage via MCP servers, enabling programmatic management of sessions, knowledge, playbooks, secrets, schedules, and attachments, plus a documentation-only DeepWiki proxy.313 npmMIT

Devnors Data MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables MCP clients to discover capabilities and call legal, enterprise, content, and express APIs using a Devnors Data API Key.430MIT- AlicenseAqualityAmaintenanceFree Industry 4.0 / IIoT tools, no API key or account: lint MQTT Sparkplug B topics, check a Unified Namespace (UNS) for naming and hierarchy problems, and run an industrial AI-readiness diagnostic for manufacturing digital transformation and smart-factory projects. Works in Claude Code, Codex and any MCP client.3267 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides MCP clients with a local gateway to the official command-line tool, enabling headless prompts and structured output while automatically rotating API keys on rate-limit responses so long-running sessions are not interrupted.62 npmMIT