Skip to main content
Glama

AIKEA

Design flat-pack furniture with Claude, get back a kit a CNC shop can cut.

AIKEA is a Model Context Protocol server. You describe a bookcase, cabinet, storage cube or desk, and Claude designs it through AIKEA. The server works out every panel and its machining, and produces a fabrication package:

  • CNC-ready DXFs: nested sheet layouts plus one file per part, with a layer for each operation (profile, drill Ø×depth, groove)

  • Cut list and hardware list that includes spares (cam locks, dowels, confirmat screws, shelf pins, anti-tip kit)

  • IKEA-style assembly instructions: lettered parts, hardware icons and isometric step drawings, in printable HTML

  • Shop notes covering layer conventions, edge bores, edge banding and machining totals

  • A quote request (RFQ) you can email to any CNC shop, or POST to a fabricator's webhook

Preview

Step drawing

Instructions

preview

step

instructions

How it works

idea ──► aikea_design ──► parts + joinery + checks ──► aikea_build ──► DXF / cut list / BOM / instructions / zip
             ▲    │                                                            │
             └────┘ revise (design_id)                        aikea_request_quote ──► CNC shop (webhook or email)
  1. Parametric templates (bookshelf, cabinet, cube, desk) generate panels in 3D. Each panel has its own right-handed local frame, so every hole is in part coordinates, the same as on the CNC bed.

  2. Joinery is computed in world space and projected onto both parts. A cam lock adds a 15mm housing and an 8mm edge bore to one panel, and a 5mm bolt hole to the mating face at the exact same world point. The tests check that every edge bore lines up with a hole in its mating part.

  3. Validation flags parts that won't fit a sheet (grain-aware), shelf sag (δ = 5wL⁴/384EI against L/600), tip-over risk, and machining that clashes or sits too close to an edge.

  4. Nesting uses MaxRects with several part orderings, and never rotates parts whose grain matters.

  5. Outputs are written to $AIKEA_HOME/designs/<id>/ (default ~/.aikea).

Related MCP server: 22B Interior Planning Master MCP

Install

git clone https://github.com/atimics/aikea && cd aikea
npm install        # also builds dist/
npm test

Claude Desktop / Claude Code (stdio)

{
  "mcpServers": {
    "aikea": { "command": "node", "args": ["/absolute/path/to/aikea/dist/index.js"] }
  }
}

Claude Code: claude mcp add aikea -- node /absolute/path/to/aikea/dist/index.js

Remote connector (Streamable HTTP)

AIKEA_PUBLIC_URL=https://aikea.example.com PORT=3000 node dist/index.js --http
# MCP endpoint:   https://aikea.example.com/mcp
# Downloads:      https://aikea.example.com/files/<design_id>/<design_id>.zip

When AIKEA_PUBLIC_URL is set, build results include download links, which is what you need when the client runs somewhere else (for example, claude.ai custom connectors). HTTP mode is stateless and has no auth, so put it behind your own auth proxy before exposing it. A Dockerfile is included.

Tools

Tool

What it does

aikea_list_options

Templates and their parameters, materials, joinery, load presets

aikea_design

Create or revise (design_id) a design → summary, issues, preview PNG

aikea_preview

Render the finished piece or any assembly step

aikea_get_design / aikea_list_designs

Read saved designs (full: true returns the part model)

aikea_shelf_sag

Quick sag check for a span, depth, material and load

aikea_build

Nest and write the full fabrication package + zip

aikea_add_fabricator / aikea_list_fabricators

Configure CNC shops

aikea_request_quote

Build and send an RFQ (webhook) and/or return an RFQ email

Built files are also exposed as MCP resources: aikea://designs/{id}/{design.json|instructions.html|SHOP_NOTES.md|cutlist.csv|hardware.csv}.

Example conversation

You: I need a bookcase for a 75cm alcove, 1.6m tall, for paperbacks. Plywood, and I'd like to be able to take it apart when I move.

Claude: (aikea_design bookshelf {width: 740, height: 1600, depth: 250, adjustableShelves: 4, joinery: "cam_dowel", material: "plywood_18"}) Here it is. At 740mm wide the shelves sag about 1mm under a full load of paperbacks (under L/600), which you won't see. It's tall enough to tip, so I've included an anti-tip kit… (aikea_build) Everything nests on one 4×8 sheet of plywood plus a hardboard back. Want me to write the quote request for a local CNC shop?

Materials and joinery

Key

Board

Sheet

baltic_birch_18, baltic_birch_12

Baltic birch ply

1525 × 1525

plywood_18

Hardwood-veneer ply

2440 × 1220

mdf_18

MDF

2440 × 1220

melamine_16, melamine_19

Melamine particleboard

2440 × 1220

hardboard_3, plywood_6

Back panels

2440 × 1220

  • cam_dowel: Ø15 cam housings with a 34mm drilling distance, Ø5 cam bolts, and Ø8×30 dowels. Knock-down and re-assemblable, like IKEA.

  • confirmat: 7×50 confirmat screws through countersunk Ø7 clearance holes, into pilot holes in the panel edges.

The back panel slides into a stopped groove in the sides and a through groove in the top and bottom. Adjustable shelves sit on Ø5 pins on a 32mm grid.

DXF conventions

All files are AutoCAD R12, in mm, with face A up.

Layer

Operation

CUT_OUTLINE

Profile cut, full depth, outside the line

DRILL_D{Ø}_Z{depth} / DRILL_D{Ø}_THRU

Vertical drilling

POCKET_W{w}_Z{depth}

Groove / pocket (closed boundary)

HBORE_INFO

Horizontal edge bores, informational: the line runs from the edge to the bore depth

LABEL, SHEET_BOUNDARY

Not machined

Most flatbed routers can't drill into panel edges, so edge bores are listed separately in SHOP_NOTES.md. The shop either drills them on a horizontal boring unit, or you drill them at home with a doweling jig.

Fulfilment: what "delivered" means today

As of 2026, no public API exists for "CNC-cut my flat-pack, kit the hardware and ship it." AIKEA therefore uses an adapter model:

  • Email RFQ (works everywhere): aikea_request_quote returns a ready-to-send email with the package zip. It lists materials, sheet count, machining totals (the numbers shops quote from), and what you want done: edge banding, edge boring, hardware kitting, finishing and delivery. If Claude also has an email connector, it can send the email for you.

  • Webhook (for shops that integrate): a fabricator in $AIKEA_HOME/fabricators.json (or AIKEA_FABRICATOR_WEBHOOK) receives a JSON POST with the full package:

{
  "schema": "aikea.rfq/v1",
  "design":   { "id": "...", "name": "...", "template": "bookshelf", "overall_mm": {"width":800,"depth":300,"height":1800}, "joinery": "cam_dowel" },
  "quantity": 1,
  "customer": { "name": "...", "email": "...", "postalCode": "..." },
  "services": { "edgeBanding": true, "horizontalBoring": true, "hardwareKit": true, "delivery": true, "finishing": null },
  "materials": [{ "key": "plywood_18", "sheets": 2, "sheet_mm": [2440, 1220], ... }],
  "machining": { "parts": 11, "profileCutM": 29.8, "holes": 220, "edgeBores": 26, "grooveM": 5.0, "edgeBandM": 8.9, "weightKg": 32.7 },
  "cutlist":  [ ... ], "hardware": [ ... ], "sheets": [ ... ], "files": [ ... ],
  "package_zip_base64": "UEsDB..."
}

Whatever the webhook returns (a quote id, price, lead time) is passed back to Claude. If you run a CNC shop and want to be a fulfilment partner, implement that endpoint.

CLI

node dist/cli.js design bookshelf examples/bookshelf.json --name "Hall bookcase" --build
node dist/cli.js build <design_id>
node dist/cli.js list

Limits (v0.1)

  • Rectangular panels only: no doors, drawers, curves or vertical dividers yet. For wide units, build two carcasses side by side.

  • Sag and stability checks are engineering estimates, not certifications. Always anchor tall furniture to the wall.

  • Material moduli and sheet sizes are nominal. Measure your actual board thickness, because grooves are sized from the nominal value.

License

MIT

Available Tools

10 tools
aikea_add_fabricatorAdd a fabricatorC

Save a CNC shop for quotes. Give an email for RFQ emails and/or a webhook URL that accepts the aikea.rfq/v1 JSON schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameYes
emailNo
notesNo
regionNo
webhookNo
servicesNo
token_envNoEnv var holding a bearer token for the webhook

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It conveys the RFQ delivery mechanism (email and/or webhook) but omits everything else an agent needs for a mutation: permission/auth requirements, whether a duplicate id overwrites or errors, the significance of the id pattern, and what happens to unmentioned fields.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the core action. Every clause carries information and there is no filler. Slightly under-specified rather than wasteful.

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

Completeness2/5

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

For an 8-parameter mutation tool with no annotations and no output schema, the description only addresses 2 of the parameters and provides no safety, idempotency, or auth context. An agent cannot reliably invoke it without guessing about the other six fields.

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

Parameters2/5

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

Schema description coverage is only 13% across 8 parameters, so the description must compensate. It mentions email and webhook (and implicitly the aikea.rfq/v1 schema), but leaves id, name, notes, region, services, and token_env completely unexplained, and never notes the required id/name pair or the id slug pattern.

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

Purpose4/5

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

States a specific verb and resource: 'Save a CNC shop for quotes.' This clearly distinguishes it from the sibling aikea_list_fabricators, which is a read tool. It's clear but doesn't explicitly name the sibling or the broader workflow placement.

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

Usage Guidelines3/5

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

The description implies this is a setup step before requesting quotes ('for quotes'), and says what to provide (email/webhook). However it gives no explicit when-to-use guidance, no prerequisites (e.g., must the shop be registered before aikea_request_quote), and no mention of alternatives like aikea_list_fabricators.

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

aikea_buildBuild the fabrication packageB

Nest parts onto sheets and write the fabrication package: nested-sheet and per-part DXFs (layered by operation), cutlist.csv, hardware.csv, instructions.html (IKEA-style), SHOP_NOTES.md and a zip. Returns file paths (and download URLs when served over HTTP) plus a sheet layout image.

ParametersJSON Schema
NameRequiredDescriptionDefault
trimNoUnusable margin at sheet edges, mm (default 12)
spacingNoExtra gap between parts, mm (default 4)
design_idYes
tool_diameterNoRouter bit diameter, mm (default 6.35)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does well on the output side by naming every artifact and stating that paths/URLs plus a layout image are returned. It is silent on the mutation profile: whether it writes to disk, overwrites prior builds, costs money, or requires a saved design.

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

Conciseness4/5

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

One dense sentence front-loaded with the core action, followed by the artifact list. Every clause carries information; the enumeration of outputs is long but each item is useful for verifying success.

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

Completeness4/5

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

No output schema exists, and the description compensates by describing return values and download URLs in detail. Combined with near-complete parameter documentation, an agent has enough to call and interpret the tool, though overwrite/failure behavior is unaddressed.

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

Parameters3/5

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

Schema coverage is 75% and the three documented params already carry units, ranges and defaults (trim, spacing, tool_diameter). The description adds no semantic detail beyond the schema, and design_id remains undocumented in both places. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (nest, write) plus the resource (fabrication package) and enumerates the concrete artifacts produced, so the agent knows exactly what the tool yields. It does not, however, differentiate itself from the sibling aikea_preview, which likely renders a layout without emitting files.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites (e.g. design must exist / be finalized), and no mention of aikea_preview as the lighter-weight alternative for just viewing a layout. The 'build' framing implies a terminal step but the agent is left to infer it.

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

aikea_designCreate or revise a furniture designA

Generate a parametric flat-pack design: every panel, its CNC machining (holes, grooves, edge bores), hardware and assembly steps. Returns a summary, validation issues and a preview image. Pass design_id to revise an existing design in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoHuman-friendly name, e.g. 'Living room bookcase'
paramsNoTemplate parameters (mm). Omitted values use the template defaults.
templateYesTemplate key from aikea_list_options
design_idNoExisting design to overwrite (revision)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; it usefully discloses the destructive overwrite semantics ('revise an existing design in place') and the returned artifacts. It omits other behavior an agent would want, such as whether generation is deterministic, persistence/ownership implications, permissions, or cost.

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

Conciseness5/5

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

Three short sentences, each earning its place: purpose first, then return values, then the revision hint. No filler or restatement of the title.

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

Completeness4/5

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

There is no output schema, but the description compensates by naming the return payload (summary, validation issues, preview image), and all four parameters are documented in the schema. A mutation-capable tool with no annotations could say more about side effects, but the essentials are covered.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including the mm units and the revision semantics of design_id. The description's restatement of the design_id behavior adds little beyond what the schema states, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource ('Generate a parametric flat-pack design') and enumerates the concrete outputs it produces (panels, CNC machining, hardware, assembly steps), which clearly separates it from siblings like aikea_get_design or aikea_list_designs.

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

Usage Guidelines4/5

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

It explicitly tells the agent that passing design_id switches the tool into revision-in-place mode, which is genuine usage guidance, and it points to aikea_list_options as the source of valid template keys. It does not, however, say when to prefer this over aikea_get_design for inspecting an existing design or what to do if the template is unknown.

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

aikea_get_designGet a designA
Read-only

Return a saved design's summary, or the full JSON model (every part with local-frame machining) when full=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
design_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true; the description adds genuine behavioral content by describing the two response shapes and the contents of the full model ('every part with local-frame machining'). It omits error behavior (e.g. unknown design_id) and payload size/rate implications of full=true.

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

Conciseness5/5

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

A single sentence that front-loads the default behavior (summary) and then qualifies the alternative. No wasted words and no redundancy with the schema.

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

Completeness4/5

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

With no output schema and minimal annotations, the description adequately explains the return shape and the switch that changes it. Given the low complexity (2 params, one required), only edge-case error handling is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It does define what full=true actually returns, which the schema does not; design_id is self-evident by name. It compensates well for the coverage gap without fully documenting both parameters.

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

Purpose4/5

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

States a specific verb ('Return') and resource ('a saved design'), and clearly distinguishes the two output modes (summary vs full JSON model). It does not explicitly contrast itself with the similarly named sibling aikea_design or aikea_list_designs, so it falls short of a 5.

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

Usage Guidelines3/5

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

It gives one concrete condition for opting into the heavier mode ('when full=true'), which is implied usage guidance. However, it never says when to prefer this tool over aikea_design, aikea_list_designs, or aikea_preview, and offers no exclusions or prerequisites.

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

aikea_list_designsList saved designsA
Read-only

List saved designs, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already establishes this is a safe read. The description adds one genuine behavioral fact beyond the annotations — results are ordered newest first — but says nothing about pagination, result limits, or what a saved design record contains.

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

Conciseness5/5

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

A single sentence with no waste, front-loading the resource and appending the ordering constraint. Nothing could be removed without losing information.

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

Completeness4/5

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

For a zero-parameter list tool with no output schema, the description covers the essentials: what it returns and in what order. It is slightly thin on whether the list is unbounded or paginated, which is the one thing an agent might need before calling it.

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

Parameters4/5

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 burden to carry; the baseline for a parameterless tool is 4. The description correctly does not invent argument documentation.

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

Purpose4/5

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

States a specific verb (list) and resource (saved designs), plus an ordering guarantee. It is clearly distinguishable from aikea_get_design (single fetch) and from aikea_list_options/list_fabricators by resource, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the verb: use this to enumerate saved designs before fetching one with aikea_get_design. There is no explicit when-to-use, when-not-to-use, or prerequisite guidance, and no mention of how this differs from aikea_design or aikea_build.

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

aikea_list_fabricatorsList fabricatorsB
Read-only

List CNC shops configured for quotes ($AIKEA_HOME/fabricators.json, or AIKEA_FABRICATOR_WEBHOOK).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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 usefully adds where the list comes from ($AIKEA_HOME/fabricators.json or the AIKEA_FABRICATOR_WEBHOOK env var), which helps an agent reason about configuration state, but it says nothing about what happens when neither source exists (empty list vs error).

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

Conciseness4/5

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

A single front-loaded sentence with the core action first and configuration sources relegated to a parenthetical. Nothing is wasted, though the file-path/env-var detail is closer to implementation trivia than selection-relevant information.

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

Completeness4/5

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

For a zero-parameter read-only list tool with readOnlyHint covering safety and no output schema required, the description covers the essential purpose and data source. The only gap is whether the result is an empty list or an error when no fabricators are configured.

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

Parameters4/5

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

The tool takes zero parameters and the schema is trivially complete, so the baseline of 4 applies. There are no parameter semantics for the description to clarify or omit.

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

Purpose4/5

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

The description names a specific verb ('List') and resource ('CNC shops configured for quotes'), which is clearer than the bare title 'List fabricators' and tells the agent this returns quote-capable shops rather than, say, designs or options. It does not explicitly differentiate itself from siblings like aikea_list_options or aikea_list_designs, but the resource is distinct enough to disambiguate.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus alternatives, nor any prerequisite or ordering guidance (e.g., call before aikea_request_quote or aikea_add_fabricator). Usage is only implied by the verb 'List'.

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

aikea_list_optionsList templates, materials and optionsA
Read-only

List furniture templates with their parameters, board materials, joinery methods and load presets. Call this first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

readOnlyHint=true already establishes this is a safe read, so the bar is lower. The description adds workflow context (call first) but says nothing about return volume, pagination, or whether results are static/cached. Adequate but not rich.

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

Conciseness5/5

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

Two short sentences, zero waste, with the resource and the ordering instruction front-loaded. Every clause earns its place.

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

Completeness4/5

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

With no input schema properties and no output schema, the description carries the burden of explaining what the agent gets back, and it does list the returned categories. It could mention scope or freshness, but it is sufficient for a simple discovery call.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description enumerates what the (implicit) result set covers, which is the only semantic content available for a parameterless listing call.

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

Purpose4/5

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

States a specific verb (List) and resource (furniture templates) plus the categories of data returned (parameters, board materials, joinery methods, load presets). It is clear what the tool does, though it does not explicitly contrast itself with sibling list tools like aikea_list_designs or aikea_list_fabricators.

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

Usage Guidelines4/5

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

"Call this first" gives explicit sequencing guidance relative to the other aikea_* tools, which is valuable for a discovery-listing tool. There is no when-not guidance or named alternative, so it stops short of a 5.

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

aikea_previewRender a designA
Read-only

Render an isometric preview of the finished piece, or of a single assembly step (1-based) with the newly added parts highlighted and labelled.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepNo
design_idYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description is consistent with a safe read operation. It usefully adds that the optional step is 1-based and that newly added parts are highlighted and labelled, but says nothing about the return medium (image data vs URL) or rendering cost, which matters with no output schema.

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

Conciseness5/5

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

A single well-formed sentence that front-loads the core action and packs the step semantics and highlight behavior into the remainder. No filler or redundancy.

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

Completeness3/5

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

With no output schema, the description should say what the caller receives (image bytes, URL, file path), but it leaves the return value unspecified. Combined with the undocumented design_id, the definition is adequate but incomplete for a two-parameter rendering tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden for both parameters. It explains step well (1-based index selecting a single assembly step) but never clarifies design_id, leaving half the parameters undocumented in both schema and prose.

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

Purpose5/5

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

States a specific verb (render) and resource (isometric preview of the finished piece or a single assembly step) plus the distinguishing behavior of highlighting and labelling newly added parts. An agent can differentiate this visualization tool from siblings like aikea_get_design or aikea_build 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.

Usage Guidelines3/5

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

The description implies usage (call it to visualize a design or a build step) but never states when to choose this over alternatives such as aikea_get_design or aikea_build, nor any preconditions like requiring the design to already exist. Guidance is inferable but not explicit.

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

aikea_request_quoteRequest a fabrication quoteB

Package a design for a CNC shop: builds it if needed, POSTs the RFQ to the fabricator's webhook when one is configured, and always returns a ready-to-send RFQ email (to/subject/body + zip path). Confirm quantities and contact details with the user before submitting.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
customerYes
deliveryNo
quantityNo
design_idYes
finishingNoe.g. 'clear matte lacquer', or omit for raw
needed_byNo
edge_bandingNo
hardware_kitNo
fabricator_idNo
horizontal_boringNoAsk the shop to drill edge bores (otherwise the customer uses a jig)

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: it may build the design first, the webhook POST is conditional ('when one is configured'), and it always returns a ready-to-send RFQ email with to/subject/body plus a zip path. It omits permissions/auth expectations and what happens on webhook failure.

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

Conciseness4/5

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

Two sentences, front-loaded with the core packaging behavior and finishing with the actionable imperative, with no filler. Slightly dense but every clause conveys a distinct behavior.

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

Completeness2/5

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

Against 11 parameters, 18% schema coverage, nested objects, no annotations, and no output schema, the description leaves most inputs (design_id, fabricator_id, finishing, needed_by, delivery/edge_banding/hardware_kit defaults) unexplained. It handles the return shape well but is incomplete for a tool of this complexity.

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

Parameters2/5

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

Schema description coverage is only 18% across 11 parameters, including a nested customer object and several boolean flags (delivery, edge_banding, hardware_kit) with defaults that are never explained. The description only alludes to quantity and contact details via the confirmation instruction, adding almost no semantics beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Package a design for a CNC shop', 'POSTs the RFQ') and enumerates the concrete side effects, which cleanly separates it from siblings like aikea_build or aikea_preview. It stops short of naming an alternative tool, so it is clear but not fully sibling-differentiated.

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

Usage Guidelines3/5

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

Provides a real precondition ('Confirm quantities and contact details with the user before submitting') and a conditional ('when one is configured'), which is more than pure implication. However, it never says when to reach for this tool versus aikea_build or aikea_preview, nor when not to use it.

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

aikea_shelf_sagEstimate shelf sagA
Read-only

Estimate the deflection of a uniformly loaded shelf (simply supported). Useful for choosing widths/materials before designing.

ParametersJSON Schema
NameRequiredDescriptionDefault
loadNobooks
spanYesUnsupported span, mm
depthYesShelf depth, mm
materialNoplywood_18

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe calculation. The description adds the model assumptions (uniformly loaded, simply supported), which is genuinely useful for judging validity, but says nothing about units, whether the result is an estimate with error bounds, or what the tool returns.

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

Conciseness5/5

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

One sentence plus a short clause, with the core action and its modeling assumption front-loaded. No filler.

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

Completeness3/5

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

For a 4-parameter calculator with no output schema and half the parameters undocumented, the description leaves real gaps: undefined material values, no units, and no indication of what the returned deflection looks like. It is workable but not complete.

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

Parameters2/5

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

Schema description coverage is only 50%: span and depth carry descriptions, but 'load' (enum light/books/heavy) and 'material' (default plywood_18) are undocumented in both schema and description. The description contributes no parameter meaning at all, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb ('estimate deflection') and a precise resource scope ('uniformly loaded shelf, simply supported'), which no sibling tool covers. It does not name or contrast with siblings such as aikea_design, but the domain specificity makes overlap unlikely.

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

Usage Guidelines4/5

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

'Useful for choosing widths/materials before designing' gives clear context for when to reach for this tool and implies the workflow step relative to aikea_design. It stops short of naming an alternative tool or stating when not to use it.

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

Tool Schema Changelog

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

  1. 10 tool updatesv0.1.0
    • First observedaikea_add_fabricator
    • First observedaikea_build
    • First observedaikea_design
    • First observedaikea_get_design
    • First observedaikea_list_designs
    • First observedaikea_list_fabricators
    • First observedaikea_list_options
    • First observedaikea_preview
    • First observedaikea_request_quote
    • First observedaikea_shelf_sag

TDQS

A3.6/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target distinct resources and actions, but a few overlaps exist: aikea_design already returns a preview image while aikea_preview renders specific previews, and aikea_request_quote internally builds a design, blurring the line with aikea_build. The descriptions clarify these differences well enough that an agent can usually select correctly.

Naming Consistency4/5

All tools share the aikea_ prefix and use snake_case, which is good. However, most follow a verb_noun pattern (list_options, get_design, add_fabricator), while several are verb-only (design, preview, build) and one is noun_noun (shelf_sag), creating minor inconsistency.

Tool Count5/5

With 10 tools, the set is well-scoped for a parametric furniture design and CNC fabrication server. Each tool covers a distinct part of the workflow: templates, design, retrieval, preview, engineering check, build, fabricator management, and quoting.

Completeness4/5

The core lifecycle from design to fabrication and quoting is covered, and aikea_design allows in-place revision. Minor gaps include no delete operations for saved designs or fabricators, and no way to fetch a single fabricator, but these are not critical for the primary workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI-powered CAD automation in Autodesk Fusion 360 through natural language prompts. Features a modern web chat interface with multiple LLM backends for creating 3D models, sketches, and parametric designs.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to create and edit 3D floor plans conversationally, describing rooms and layouts or uploading DWG/PDF drawings, then view them in 2D/3D via a live link.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables professional furniture design from dimensions and type to a complete manufacturing package, including structural validation, cut optimization, BOM generation, assembly instructions, interactive HTML report with 3D viewer, and optional FreeCAD export.
    1
    MIT