Skip to main content
Glama

thermia-kb-mcp

An MCP server that gives any AI assistant (Claude, ChatGPT, Cursor, local models, …) a verified technical knowledge base for the Thermia Duo 12, 400 V 3N ground-source heat pump, plus the original manuals it was built from.

It is meant for people building their own controller or monitor (ESP32 / ESPHome / Home Assistant) for this pump, and for anyone servicing or wiring one.

What is in it

  • Knowledge base in English and European Portuguese, ~1,000 lines each:

    • specifications

    • power and control wiring with wire numbers

    • every control-unit terminal (211–220, 301–334)

    • sensor resistance tables with Steinhart–Hart fits

    • start/stop logic, menus, all factory settings with limits, alarms

    • expansion card, cooling module, fan coils

    • ESP32 integration: the EXT I2C bus with the full register map, the room-sensor protocol on 303/304, and EVU on 307/308

  • Every fact carries its source and PDF page, e.g. [ELEC p.40].

  • Facts read from drawings or reverse-engineered by the community are marked as such.

  • 45 pre-rendered schematic pages.

  • The 7 original PDFs (~29 MB). The server can render or extract text from any page, so a model can verify a citation itself.

Covers the standard Duo 12 (drawing 56960) and the Duo Optimum 12 (drawing 57156). Much of it also applies to the other Duo sizes and to Diplomat / Danfoss DHP pumps of the same generation, but check against your own unit.

Tools

Tool

What it does

list_sections(lang)

Table of contents (section ids like 6.1, 16.8, 21.5)

get_section(section_id, lang)

Full Markdown of a section (6 includes 6.1, 6.2, …)

search_kb(query, lang, max_results)

Accent-insensitive keyword search over paragraphs and table rows

lookup_terminal(terminal, lang)

Everything about one terminal: 211, 303, 1L1, PE5, 357, …

lookup_register(register, lang)

Everything about one EXT-bus register: r32, 0x33, 19 (hex)

list_images() / get_image(name)

Pre-rendered schematic pages (name or unique fragment, e.g. ELEC_p040)

list_source_documents()

The original PDFs with their citation tags

get_source_page(source, page, dpi)

Render any page of an original PDF, e.g. source="ELEC", page=40

get_source_page_text(source, page)

Text layer of one PDF page

Resource: kb://en, kb://pt – the complete knowledge base. lang is en (default) or pt.

Related MCP server: IDM Heat Pump MCP Server

Install and connect

Requires Python ≥ 3.10. The easiest way is uv, which runs it straight from GitHub:

uvx --from git+https://github.com/vazluis83/thermia-kb-mcp thermia-kb-mcp

Claude Code

claude mcp add thermia-kb -- uvx --from git+https://github.com/vazluis83/thermia-kb-mcp thermia-kb-mcp

Claude Desktop / other clients using a JSON config

{
  "mcpServers": {
    "thermia-kb": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/vazluis83/thermia-kb-mcp", "thermia-kb-mcp"]
    }
  }
}

Without uv

pip install git+https://github.com/vazluis83/thermia-kb-mcp
thermia-kb-mcp                                   # stdio
thermia-kb-mcp --http --host 0.0.0.0 --port 8000 # streamable HTTP at http://HOST:8000/mcp

The knowledge base itself is plain Markdown, so you can also read it directly or paste it into any model: src/thermia_kb_mcp/data/thermia-duo12-knowledge-base-EN.md · …-PT.md.

Source documents

Tag

File

Document

INST

INST_Duo-installation_9680-54961001.pdf

Thermia Duo – Installation instructions, v4

ELEC

ELEC_Duo-electrical-installation_9680-55353001.pdf

Thermia Duo – Electrical installation (all Duo schematics), Rev 2

USER

USER_Duo-user-manual_9680-54962001.pdf

Thermia Duo – User's manual, Rev 2

EXP1

EXP1_Diplomat-expansion-card_9680-55173001.pdf

Thermia Diplomat expansion card, Rev 3

EXP2

EXP2_Expansion-card-install_086U6715.pdf

Expansion card installation 086U6715 (multilingual)

COOL

COOL_Cooling-module-install_086U7815.pdf

Cooling module passive / passive-active 086U7815 (multilingual)

FAN

FAN_Zantia-ventiloconvectores.pdf

Zantia fan-coil catalogue (Portuguese)

Page numbers in citations are PDF page numbers.

Development

pip install -e ".[test]"
pytest

Safety

This is reference information, not instructions to work on live equipment. The pump runs on 400 V three-phase: mains work must be done by a qualified electrician. Never bypass the pump's safety devices (pressure switches B1/B2/B3, overload F11, heater guard T1). Writing to the pump over the EXT bus is unacknowledged and at your own risk.

Credits and licences

  • Server code and the knowledge-base text: MIT (see LICENSE).

  • EXT-bus protocol, register map and room-sensor protocol come from mdepa91/esphome-thermia, mdepa91/esphome-thermia-room (MIT) and ThermIQ/thermiq_mqtt-ha (MIT), building on reverse engineering by rainisto.

  • The PDF manuals and the images rendered from them are © their respective owners (Thermia Värme AB / Danfoss, Zantia). They are included unmodified for reference by owners of this equipment and are not covered by the MIT licence. Rights holders can ask for removal by opening an issue.

  • Not affiliated with Thermia, Danfoss or Zantia.

Available Tools

10 tools
get_imageA

Return one image (PNG/JPG; SVG is returned as an image with format svg+xml). Accepts the exact name or a unique fragment such as 'ELEC_p040' or 'sheet3_external'.

NameRequiredDescriptionDefault
nameYes

TDQS

A3.7/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 return formats (PNG/JPG, and SVG delivered as svg+xml), but says nothing about behavior when a fragment is ambiguous or no match exists, nor about size or auth constraints.

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 sentences with no filler; the core return behavior is front-loaded and the format caveat follows immediately. Every clause adds information an agent would otherwise have to guess.

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 simple single-parameter read tool with no output schema, this covers purpose, return format, and input shape adequately. The one real gap is what happens when the fragment is not unique or matches nothing.

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 coverage is 0%, so the description must compensate for the single undocumented `name` parameter, and it does: it explains that the value may be an exact name or a unique fragment and gives concrete examples like 'ELEC_p040' and 'sheet3_external'.

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 ("Return one image") plus the supported formats, which separates it from list_images and get_source_page. It does not explicitly name a sibling it replaces, so it stops short of full differentiation.

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 only implied: an agent can infer this fetches the binary image itself while list_images enumerates them, but the description never says when to call this versus listing or searching. No exclusions or prerequisites are given.

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

get_sectionA

Return the full Markdown of a section. A top-level id like '6' includes its subsections; '6.1' returns only that subsection. lang: 'en' or 'pt'.

NameRequiredDescriptionDefault
langNoen
section_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load, and it does disclose a non-obvious trait: a top-level id such as '6' pulls in its subsections while '6.1' does not. It says nothing about error behavior for unknown ids, permission requirements, or whether the lang parameter falls back when a translation is missing.

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 tight sentences, front-loaded with the action and followed by the argument semantics that need explaining. Every clause carries information an agent would otherwise have to guess.

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

Completeness4/5

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

An output schema exists, so return-value shape need not be described, and both parameters get narrative coverage. The remaining gap is failure/edge behavior (invalid section_id, unavailable translation) for a simple two-parameter read tool, which keeps it short of a 5.

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 compensate, and it largely does: section_id format is illustrated with concrete dot-notation examples and lang is given its allowed values ('en' or 'pt'). It stops short of stating the default for lang (the schema shows 'en') or whether the two languages can diverge in structure.

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 opens with a concrete verb and resource ("Return the full Markdown of a section"), which is unambiguous about what comes back. It implicitly separates itself from list_sections by returning content for one section, but never names the 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?

The id-hierarchy explanation tells an agent which kind of section_id to supply for the desired scope, which is useful decision information. However, there is no explicit statement of when to use get_section versus list_sections, search_kb, or the get_source_page family, so sibling selection remains inferred.

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

get_source_pageA

Render one page of an original PDF so you can check a citation or read a schematic yourself. source: tag INST, ELEC, USER, EXP1, EXP2, COOL or FAN. page: PDF page number exactly as cited in the knowledge base (e.g. [ELEC p.40] -> source='ELEC', page=40). dpi 50–300; use ~200 for dense schematics.

NameRequiredDescriptionDefault
dpiNo
pageYes
sourceYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does reasonably well: it reveals the operation is a render of an existing page (non-mutating), gives the valid dpi band (50–300) and a quality/perf tradeoff hint (~200 for dense schematics). It stops short of describing the returned artifact format or any cost/latency implications.

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

Conciseness5/5

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

Three short sentences, purpose and payoff front-loaded, then parameter guidance in a compact clause-per-parameter rhythm. No filler and nothing repeated from the name.

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 3-parameter render tool with no output schema and no annotations, the description supplies the essentials: valid source tags, page convention, dpi range. The one remaining gap is the shape of the return value (image type/format) and any failure mode for out-of-range pages.

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

Parameters5/5

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

Schema coverage is 0%, yet the description documents all three parameters: the allowed source tags (INST, ELEC, USER, EXP1, EXP2, COOL, FAN), the page numbering convention tied to KB citation syntax, and the dpi range with guidance. This more than compensates for the bare schema, which has no enums or property descriptions.

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+resource: 'Render one page of an original PDF'. The qualifier 'so you can check a citation or read a schematic yourself' pins down the intent, and the contrast with the text-oriented siblings (get_source_page_text, list_source_documents) is implicit but discernible from 'Render'.

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?

Clearly indicates when to reach for it: verifying a citation or inspecting a schematic visually. The '[ELEC p.40] -> source=ELEC, page=40' example turns a usage rule into something directly actionable. It does not explicitly say when to prefer get_source_page_text instead, which keeps it below a 5.

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

get_source_page_textA

Extract the text layer of one page of an original PDF (same arguments as get_source_page). Schematic pages contain little text; render them with get_source_page instead.

NameRequiredDescriptionDefault
pageYes
sourceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose a real behavioral trait: only the embedded text layer is returned, so schematic pages yield little or nothing. It does not state what happens on a page with no text layer (empty result vs. error) or that no OCR is performed, leaving a small gap.

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 tight sentences with the core action front-loaded and the fallback routing appended. No filler, no restatement of the name.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the read-only nature of text extraction is self-evident. What remains thin is the format of `source` and the behavior on pages lacking a text layer.

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 0% for both required parameters, so the description must compensate. It clarifies that page refers to a single page of the original PDF and that the arguments mirror get_source_page, but never defines what form `source` takes (ID, path, or name), so the compensation is only partial.

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

Purpose5/5

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

States a specific verb and resource ("Extract the text layer of one page of an original PDF") with an explicit scope of one page. It also distinguishes itself from the sibling get_source_page by naming the page type where that tool is preferred, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit exclusion plus the alternative: schematic pages contain little text, so render them with get_source_page instead. This is a concrete when-not/use-instead rule rather than implied usage.

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

list_imagesB

Names of the rendered schematic / drawing images. Names encode source and PDF page, e.g. 'ELEC_p040_Duo12-400V_sheet2_control-unit-E1.png' = electrical installation manual, PDF page 40.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/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 and does disclose meaningful domain context: these are rendered schematics/drawings and filenames encode source document and PDF page. It says nothing about ordering, whether the set is complete, whether it can be empty, or that it is a read-only operation.

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, no padding, and the filename-encoding example is genuinely informative. It is not front-loaded with the action, however — the reader learns what the images are before learning that this returns a list of them.

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?

An output schema exists, so return values need not be explained, and the naming convention is covered. But for a no-annotation, no-parameter enumeration tool in a set containing get_image and get_source_page, the missing link between listing names and fetching an image leaves a real gap.

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 of 4 applies; there is no parameter semantics to explain and the description does not waste space on them.

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

Purpose3/5

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

The description is a noun phrase ('Names of the rendered schematic / drawing images') rather than a statement of what the tool does, so the verb (list/enumerate) must be inferred from the tool name. The resource is clear and specific, but there is no differentiation from get_image or the other list_* siblings.

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?

Provides no when-to-use guidance, no prerequisites, and no mention of the obvious alternative get_image. An agent could infer that this is a discovery step preceding get_image, but that inference is never stated.

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

list_sectionsB

List all numbered sections of the knowledge base (id, title, level). lang: 'en' or 'pt'.

NameRequiredDescriptionDefault
langNoen

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. Saying 'List all' usefully implies a complete, non-paginated enumeration with no filtering, but it says nothing about whether this requires any setup, how large the result may be, or how lang affects the returned titles.

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

Conciseness4/5

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

Front-loaded single sentence naming the resource and return fields, followed by a compact parameter note. The trailing fragment 'lang: 'en' or 'pt'.' is clipped but efficient; nothing is wasted.

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?

An output schema exists, so return shape need not be explained, and the tool is a simple zero-required-parameter read. The main completeness gap is routing: with nine siblings including get_section and search_kb, the description should say when this enumeration is the right 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?

Schema coverage is 0% for the single 'lang' parameter – the schema only supplies a default of 'en' and no description or enum. The description compensates by enumerating the accepted values ('en' or 'pt'), which is the key missing information, though it never states what lang actually changes or that it defaults to 'en'.

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 ('List all numbered sections of the knowledge base') and even names the returned fields (id, title, level), so the agent knows exactly what it gets. It does not distinguish itself from siblings like get_section or search_kb, leaving the choice to inference.

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 or when-not-to-use guidance and no reference to the obvious alternatives (get_section for a single section, search_kb for targeted lookup). The agent must infer that this is the enumerate-everything option from the word 'all'.

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

list_source_documentsA

The original PDF manuals the knowledge base was built from: tag (as used in citations like [ELEC p.40]), file name, page count and title.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the burden. It makes clear this is a catalog of source files rather than content, implying a safe read, but it doesn't state whether all documents are returned, ordering, or whether tags are stable identifiers — context that would matter when feeding tags to other tools.

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 well-formed sentence with the resource front-loaded and the field list trailing. The field enumeration partially duplicates the output schema, which is mild redundancy, but nothing is wasted or buried.

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

Completeness4/5

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

An output schema exists, so the return fields need not be explained, and for a zero-parameter listing this is close to sufficient. The only real gap is the missing link to sibling tools such as get_source_page, which use the tags this tool emits.

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. There are no parameters whose meaning could be lost, and the description correctly implies the call needs no inputs.

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 the resource precisely — the original PDF manuals behind the knowledge base — and enumerates the fields returned (tag, file name, page count, title). The verb is only implied by the tool name 'list', but the resource is sharply distinguished from sibling resources like sections and images.

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 only implied: the mention of the citation tag format '[ELEC p.40]' hints that this tool supplies the tags needed to query pages, but it never says when to call this versus list_sections, search_kb, or get_source_page. No exclusions or prerequisites are stated.

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

lookup_registerA

Everything about one EXT-bus register (ThermIQ map, as used by esphome-thermia): accepts 'r32', '0x32' or '32' (hex). Returns the register-map rows with meaning, unit, range, matching pump menu parameter and whether it is confirmed on real hardware.

NameRequiredDescriptionDefault
langNoen
registerYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/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 returned fields (meaning, unit, range, matching pump menu parameter, hardware confirmation) and input representations, but it does not explicitly state that this is a read-only operation, nor does it mention error behavior for invalid registers.

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?

The description is two sentences with no filler. It front-loads the tool's scope and immediately follows with accepted formats and return contents, so every sentence 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?

An output schema exists, so the description need not fully specify return structure, but it still gives a useful return overview. For a simple lookup tool this is nearly complete, with the main gap being the undocumented 'lang' parameter and no sibling-routing guidance.

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 must compensate. It adds strong meaning for the required 'register' parameter by explaining that 'r32', '0x32', and '32' are accepted hex forms, but it entirely omits the optional 'lang' parameter.

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 states a specific verb and resource: looking up one EXT-bus register in the ThermIQ map. It gives the accepted input formats and domain context, making the purpose clear, though it does not explicitly distinguish itself from siblings such as lookup_terminal or search_kb.

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 narrow 'one register' scope and the accepted format examples. However, there is no explicit when-to-use guidance, no when-not guidance, and no named alternative for related tasks like searching the knowledge base or looking up terminals.

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

lookup_terminalB

Every table row / note mentioning a terminal of the heat pump, expansion card or cooling module, e.g. '211', '303', '1L1', 'PE5', '251', '357'. Gives function, wiring, wire number and source page.

NameRequiredDescriptionDefault
langNoen
terminalYes

Output Schema

NameRequiredDescription
resultYes

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 burden, and it does disclose the returned record fields (function, wiring, wire number, source page), which tells the agent what a hit looks like. It omits any statement about lookup scope, whether the match is exact or fuzzy, or what happens with the lang parameter.

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 dense sentences with no filler. The six example identifiers are slightly more than needed and lead the sentence rather than the action, but they efficiently convey the format variety.

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?

An output schema exists, so return-shape detail is not required, and the description covers the record fields anyway. However, for a tool with zero annotation and zero schema-description coverage, leaving the `lang` parameter and the matching behavior unexplained is a real gap.

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 0%, so the description must compensate. The examples do illustrate the accepted terminal format, but the `lang` parameter (default 'en') is never mentioned, and the description does not clarify whether `terminal` is an exact identifier or a partial match.

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 concrete resource (terminals of the heat pump, expansion card, cooling module) and states what it returns (function, wiring, wire number, source page), with realistic example identifiers. It never explicitly says 'look up a terminal' or distinguishes itself from the sibling lookup_register, so the boundary between the two lookups is left implicit.

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?

There is no explicit when-to-use statement, no prerequisites, and no named alternatives (lookup_register, search_kb). The examples '211', '303', '1L1', 'PE5' implicitly signal the kind of input that makes this tool applicable, which provides only implied guidance.

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

search_kbA

Keyword search over paragraphs, list items and table rows (accent-insensitive). Returns the best matching blocks with their section id; read the section with get_section for context. lang: 'en' or 'pt'.

NameRequiredDescriptionDefault
langNoen
queryYes
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden and does a fair job: it discloses accent-insensitive matching, the unit of the returned blocks, that only the best matches come back, and that section ids are included. It leaves out the max_results cap/default behaviour and anything about result volume, which matters for a search tool returning an unbounded-looking list.

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 sentences, no filler, with the search scope and the get_section hand-off front-loaded before the lang detail. Every clause carries information an agent needs.

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

Completeness4/5

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

An output schema exists, so return-value shape need not be explained, and the description covers purpose, matching semantics, lang values and the next step. The only real gap is the unmentioned max_results, which matters for controlling result size.

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 has to compensate. It defines lang ('en' or 'pt'), which the schema does not (no enum), and clarifies that query is a keyword rather than natural language, but max_results is never mentioned and its default of 10 is only discoverable from the schema.

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

Purpose5/5

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

States a specific verb and resource plus the exact index granularity: 'Keyword search over paragraphs, list items and table rows (accent-insensitive)'. It also names the follow-up sibling (get_section) for context, so an agent can distinguish it from list_sections and the lookup_* tools without opening a schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent onward ('read the section with get_section for context'), which is real when-to-use guidance for the next step. It does not state when to prefer search_kb over list_sections or the lookup_terminal/lookup_register siblings, so the coverage is clear but not exhaustive.

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 observedget_image
    • First observedget_section
    • First observedget_source_page
    • First observedget_source_page_text
    • First observedlist_images
    • First observedlist_sections
    • First observedlist_source_documents
    • First observedlookup_register
    • First observedlookup_terminal
    • First observedsearch_kb

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation4/5

Each tool has a distinct role: section browsing (list_sections/get_section) vs. free-text search (search_kb), and two orthogonal technical lookups (lookup_terminal for wiring terminals, lookup_register for EXT-bus registers). The only mild overlap is get_image (pre-rendered schematics) vs. get_source_page (render any PDF page), but the descriptions make the boundary reasonably clear.

Naming Consistency5/5

Consistent snake_case verb_noun pattern throughout (list_sections, get_section, search_kb, lookup_terminal, lookup_register, list_images, get_image, list_source_documents, get_source_page, get_source_page_text). Suffixed variants like get_source_page_text logically extend their base tool rather than breaking the convention.

Tool Count5/5

10 tools is well within the ideal 3-15 range and each earns its place: browsing, search, two specialized lookups, image access, and raw PDF access. No redundant or filler tools.

Completeness4/5

Read-only KB coverage is strong: navigation, search, targeted technical lookups, images, and access to original PDFs (both render and text layer) cover the main workflows. Minor gap: lookup_terminal and lookup_register require a known key and offer no way to enumerate all terminals or registers, which could stall an exploratory query.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides AI assistants with direct access to Jamf official documentation, enabling them to answer Jamf-related questions by searching, retrieving articles, and browsing product documentation.
    6
    407 npm
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables searching and reading AVEVA Customer Support Portal knowledge base articles, including tech notes, known issues, and error-message diagnostics, to ground AI answers in support content not found in public documentation.
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with manufacturer-sourced HVAC technical documentation, enabling error-code lookup, diagnostics, and guided troubleshooting with exact source citations.
    MIT