ET-MCP
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., "@ET-MCPCalculate the horizontal FOV for a 35mm lens on a full-frame sensor."
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.
ET-MCP — EarthTekniks MCP Servers (standalone)
Python MCP servers for EarthTekniks — 17 tools across 3 domain servers. No frontend, no auth, no LLM needed. Just tools.
LLM / Inspector / Claude Desktop → MCP (stdio or HTTP) → tools → answerWhat's inside
Server | Command | Tools | What it does |
|
| 6 | 11 optics calculators (FOV, working distance, DOF, exposure, focal length, line-scan, etc.) + reference tables (sensor sizes, f-stops, pixel formats) |
|
| 2 | Company / project / vision KB — BM25+grep search over 25 docs, no DB needed |
|
| 9 | Lens catalog — Supabase Postgres (read-only) + safe SQL, schema-aware search |
|
| 17 | All 3 servers in one process |
src/et_mcp/
├── server.py # FastMCP entry: --server calc|site|catalog|all, --transport stdio|streamable-http
├── settings.py # env-only config (pydantic-settings, no hardcoding)
├── retrieval/ # shared hybrid retrieval (Qdrant + BM25, optional)
├── services/
│ ├── calc/ # pure math + knowledge docs + BM25 index
│ ├── catalog/ # DB (psycopg2, read-only, timeout + row cap) + SQL validator (sqlglot)
│ └── site/ # KB chunker + BM25 index
└── tools/ # thin MCP adapters — no business logicRelated MCP server: mcp-tools-hub
Requirements
Python 3.12+
SUPABASE_DB_URL— only forcatalogtools (read-only Postgres).site+calcwork without it.Internet on first run — downloads
BAAI/bge-small-en-v1.5(~40MB, viafastembed) for optional vector stages. Falls back to BM25 if offline.
Quickstart
# 1. install
pip install -e .
# 2. env - copy and fill DB URL (catalog only)
cp .env.example .env
# edit .env: set SUPABASE_DB_URL=postgresql://user:pass@host:5432/db
# 3. run - pick one
python -m et_mcp.server --server all --transport stdio # for Claude Desktop / Inspector stdio
python -m et_mcp.server --server catalog --transport streamable-http --port 8001 # HTTP
python -m et_mcp.server --server site --transport streamable-http --port 8002
python -m et_mcp.server --server calc --transport streamable-http --port 8003
python -m et_mcp.server --server all --transport streamable-http --port 8001 # all 17 tools on one portVerify HTTP: curl http://127.0.0.1:8001/mcp should return 200 / SSE stream.
Docker
cp .env.example .env # set SUPABASE_DB_URL
docker build -f Dockerfile.mcp -t et-mcp .
docker run --env-file .env -p 8001:8001 et-mcp python -m et_mcp.server --server all --transport streamable-http --port 8001 --host 0.0.0.0Dockerfile.mcp is standalone — no chatbot, no Node.
MCP clients
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"et-mcp": {
"command": "python",
"args": ["-m", "et_mcp.server", "--server", "all"],
"cwd": "C:\\path\\to\\ETGPT"
}
}
}Or split (3 servers, uses same .venv):
{
"mcpServers": {
"et-mcp-calc": { "command": "python", "args": ["-m","et_mcp.server","--server","calc"], "cwd": "C:\\path\\to\\ETGPT" },
"et-mcp-site": { "command": "python", "args": ["-m","et_mcp.server","--server","site"], "cwd": "C:\\path\\to\\ETGPT" },
"et-mcp-catalog": { "command": "python", "args": ["-m","et_mcp.server","--server","catalog"], "cwd": "C:\\path\\to\\ETGPT" }
}
}Use absolute cwd or absolute command (C:\path\to\.venv\Scripts\python.exe) if Claude can't find python.
Inspector
npx -y @modelcontextprotocol/inspector -- python -m et_mcp.server --server all
# or HTTP: python -m et_mcp.server --server all --transport streamable-http --port 8001
# then open http://127.0.0.1:6274, connect to http://127.0.0.1:8001/mcpTools reference
calc (6) — search_calculator → get_calculator → calculate is the main flow; search_lookups → get_reference → lookup for reference tables.
Tool | Purpose |
| Find calculators for NL query |
| Inputs / gotchas / related for a |
| Run a calculator ( |
| Find reference tables |
| Schema for a reference table |
| Single value lookup from reference table |
site (2)
Tool | Purpose |
| BM25+grep over 25 docs, returns |
| Full doc by |
catalog (9)
Tool | Purpose |
| Lens families |
| Tables, optional |
| Columns, purpose, signature columns — call before |
| Which table/family fits an NL use-case |
| Full doc for a table: column meanings, NL→SQL examples, gotchas |
| Which table/family a model belongs to |
| Full row(s) for a model name |
| Filtered search ( |
| Escape hatch: validated read-only |
Smoke tests
No LLM needed — all direct Python / curl.
# 0. import check (no DB needed)
python -c "from et_mcp.tools.registry import TOOLSETS; print({k: len(v) for k,v in TOOLSETS.items()})"
# expect: {'calc': 6, 'site': 2, 'catalog': 9}
# 1. calc — BM25 + math (no DB)
python -c "
from et_mcp.services.calc.retrieval import search
from et_mcp.services.calc.dispatch import DISPATCH
from et_mcp.tools.calc import calculate
print(search('field of view for 12mm lens at 500mm', top_k=3))
# pick a formula_id from above, e.g. fov_using_sensor_size
print(calculate('fov_using_sensor_size', {'sensor_size_mm': 8.8, 'working_distance_mm': 500, 'focal_length_mm': 12}))
"
# 2. site — BM25+grep (no DB)
python -c "
from et_mcp.tools.site import search_knowledge_base, get_document
print(search_knowledge_base('garuda inspection system', top_k=3))
print(get_document('company_overview')['title'])
"
# 3. catalog — needs SUPABASE_DB_URL in .env (read-only)
python -c "
from et_mcp.tools.catalog import list_families, list_tables, describe_table
print(list_families())
print(list_tables('line_scan'))
print(describe_table('line_scan_lens_8k5u'))
"
python -c "
from et_mcp.tools.catalog import search_knowledge, get_table_knowledge
print(search_knowledge('lens for conveyor belt inspection', top_k=3))
print(get_table_knowledge('line_scan_lens_8k5u')['purpose'][:200])
"
python -c "
from et_mcp.tools.catalog import search_products, run_select
print(search_products(table='line_scan_lens_8k5u', filters=[{'column':'focal_length_mm','op':'=','value':12}], limit=2))
print(run_select('SELECT model_name, focal_length_mm FROM line_scan_lens_8k5u LIMIT 2'))
"
# 4. MCP stdio smoke (spawns server, lists tools, exits)
python -c "
import asyncio, sys
from mcp.client.stdio import stdio_client
from mcp import StdioServerParameters
async def main():
params = StdioServerParameters(command=sys.executable, args=['-m','et_mcp.server','--server','all'])
async with stdio_client(params) as (read, write):
from mcp.client.session import ClientSession
async with ClientSession(read, write) as s:
await s.initialize()
tools = await s.list_tools()
print([t.name for t in tools.tools])
asyncio.run(main())
"
# expect 17 tool names
# 5. HTTP smoke (needs server running in another terminal)
# terminal A: python -m et_mcp.server --server all --transport streamable-http --port 8001
# terminal B:
curl http://127.0.0.1:8001/mcp -H "Accept: text/event-stream"If catalog tests return hint: check SUPABASE_DB_URL — set it in .env. Site/calc failures without DB are bugs.
Environment
All via .env (see .env.example). No os.environ[...] elsewhere, no hardcoding.
Var | Required | Default | Used for |
| catalog only | — |
|
| no |
| local dir auto-created |
| no |
| vector stages (optional) |
| no |
| per-query timeout |
| no |
| max rows per query |
| no |
| site confidence gate |
| no |
| site = BM25+grep only |
Troubleshooting
Catalog DB unavailable — check SUPABASE_DB_URL— set URL in.env(formatpostgresql://user:pass@host:5432/postgres). Site/calc still work.mcp not installed. Run: pip install -e .—pip install -e .from repo root (Python 3.12+).Model not found / fastembed download failed— first run needs internet; falls back to BM25 if offline. Re-run with internet to cache.ModuleNotFoundError: et_mcp—pip install -e .orPYTHONPATH=src.address already in use :8001— another MCP server on port; use--port 8002.
Available Tools
17 toolscalculateB
Execute a calculator. Flow: search_calculator → get_calculator → calculate.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | ||
| formula_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It reveals a dependency on prior steps in the flow, but it does not state whether the operation is read-only, has side effects, or what the response contains. This leaves key behavioral traits unaddressed.
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 one short sentence plus a compact flow arrow, with no filler or redundant content. The purpose is front-loaded, though the flow could be more self-explanatory. Structurally it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with a nested free-form args object and no output schema, this description is insufficient. It omits the meaning of the parameters, the expected args structure, and the return value, and the flow hints at prerequisites without explaining them.
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 schema has 0% description coverage, and the description does not mention formula_id or args at all. Neither the schema nor the description explains what values args should take or how formula_id is to be used, leaving the agent without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Execute a calculator' uses a specific verb and resource, and the flow 'search_calculator → get_calculator → calculate' places it as the final step, distinguishing it from sibling tools. However, it does not clarify what a calculator is or what 'execute' entails, so it is not as precise as it could be.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The flow 'search_calculator → get_calculator → calculate' explicitly orders the steps and tells the agent to use calculate after retrieving a calculator. It provides clear context for when to call this tool, though it does not state exclusions or alternatives for other types of calculations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_tableA
Describe a table: columns, purpose, signature columns. Call before run_select.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of explaining behavior. It does disclose what the tool returns (columns, purpose, signature columns) and implies a read-only operation through the verb 'Describe.' However, it does not explicitly address side effects, permissions, or error behavior, though these are less critical for a describe operation.
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 two short sentences with no filler. The main purpose and output contents are front-loaded, and the usage guidance is appended in a separate concise sentence.
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 simple one-parameter describe tool, the description covers both the returned content (columns, purpose, signature columns) and the recommended invocation context (before run_select). No output schema exists, but the description sufficiently communicates what the agent should expect, though it could clarify what 'signature columns' means or how to obtain valid table names.
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 one parameter named 'table' and no schema description coverage, the description's phrase 'Describe a table' adds some semantic confirmation that the parameter identifies the target table. It does not specify where valid table names come from or the expected format, but the single self-evident string parameter reduces the risk of confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Describe') and a concrete resource ('a table'), and enumerates the key output dimensions: columns, purpose, and signature columns. It also frames the tool as a prerequisite step by saying 'Call before run_select', which differentiates it from the run_select sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage instruction: 'Call before run_select.' This provides clear context for when to use the tool, but it does not name alternatives or describe scenarios where this tool should not be used, 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.
get_calculatorA
Get inputs, gotchas, related calculators for a formula_id. Call after search_calculator.
| Name | Required | Description | Default |
|---|---|---|---|
| formula_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. The verb 'Get' implies a read operation, and the follow-up directive is useful context, but the description does not explicitly state read-only behavior, error cases, or what happens for an invalid formula_id. It is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The first sentence states the tool's output, and the second gives the invocation context. Information is front-loaded and every sentence earns its place.
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 simple single-parameter retrieval tool, the description covers what is returned (inputs, gotchas, related calculators) and when to call it. It lacks explicit read-only and error-behavior statements, but the low complexity and clear output list make it mostly 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?
The schema provides only the parameter name 'formula_id' with 0% description coverage. The description compensates by tying the parameter to the prior search_calculator call, giving the agent a clear source for the value. It does not define format or constraints, but for a single self-descriptive parameter this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('formula_id') and names the delivered content: inputs, gotchas, and related calculators. It is clear enough to distinguish this from search_calculator, but it does not explicitly contrast itself with other sibling tools in the purpose statement itself.
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?
'Call after search_calculator' provides explicit sequencing context, telling the agent when this tool should be invoked. It stops short of a full 5 because it does not state when not to use it or mention alternative tools besides the implied search_calculator.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentA
Read full text of a KB document by doc_id.
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. 'Read' makes the operation non-destructive, and 'full text' clarifies the return content. It does not cover error behavior or access restrictions, but for a simple get-by-id tool the core behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that conveys the action, resource, and parameter without wasted words. It is appropriately concise for a simple retrieval tool.
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?
The description covers the key invocation detail (doc_id) and the return substance ('full text'). It is missing guidance on where doc_id comes from and behavior when the document is not found, so the agent must infer some context from siblings or the environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, and the description ties it explicitly to the document being fetched, so doc_id's role is unambiguous. However, it adds little beyond the schema's property name and does not specify the expected format or source of valid doc_id values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('KB document'), and explicitly identifies the access mechanism ('by doc_id'). It clearly communicates what the tool does, though it does not explicitly differentiate from sibling search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you need the full text of a specific knowledge-base document and have its doc_id. However, it does not explicitly state when to prefer a search sibling or how a valid doc_id should be obtained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productB
Get full spec row(s) for a lens model.
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure on its own. It indicates a read-style 'Get' operation and that the result is a full spec row, which is useful, but it does not address return shape, missing-model behavior, or any access constraints.
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 definition is a single front-loaded sentence with no filler; every word contributes. It is appropriately short for a one-parameter getter.
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 simple getter, the one-liner is close to sufficient, but the absent output schema and lack of behavior/error details leave some ambiguity about what 'full spec' contains. It also lacks routing guidance to distinguish it from lookup_model and search_products.
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 only parameter, model_name, is documented only by its title. The description adds the context that the parameter refers to a 'lens model', but provides no format, exact-name requirements, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Get') and target ('full spec row(s) for a lens model'), making it understandable as a retrieval operation for lens-model products. It does not explicitly contrast itself with siblings like lookup_model or search_products, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided; the description only states what the tool does. An agent must infer that get_product is for exact model-name spec retrieval and that search_products or lookup_model should be used otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referenceA
Get a lookup table's purpose, keys, notes. Call after search_lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| table_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It conveys a read-only get operation and the returned data, but does not describe edge cases (invalid/missing table_id), permissions, or potential failure modes. The behavior is nonetheless simple and predictable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the operation and return fields front-loaded in the first sentence and the workflow directive in the second. Every word earns its place.
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 one-parameter getter without an output schema, the description covers the operation, the return contents, and the invocation timing. It does not address error behavior or distinguish from the lookup sibling, but this is a minor gap for such a simple tool.
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 schema only lists 'table_id' with no description, leaving 0% schema coverage. The description refers to 'a lookup table' and instructs calling after search_lookups, which implies table_id comes from those search results, but it never explicitly defines the parameter's source or format. This partially compensates for the missing schema detail.
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?
Description uses the verb 'Get' with a specific resource ('a lookup table') and lists the exact return fields ('purpose, keys, notes'). This clearly differentiates it from siblings like search_lookups, which searches, or lookup, which likely performs a lookup against the table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit instruction 'Call after search_lookups' provides a clear workflow context, telling the agent this tool should be used subsequent to a lookup search. It does not mention alternatives or exclusions, but the sequencing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_knowledgeB
Full knowledge for a table: purpose, column meanings, NL->SQL examples, gotchas.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It communicates that this is a knowledge-retrieval tool returning documentation-style information, which implies a non-mutating operation. It does not disclose output format, potential errors, or naming requirements, but for a read-oriented knowledge lookup the core behavior is reasonably conveyed.
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?
One sentence with a colon-delimited list of contents. No filler, no repetition of the schema, and the most important element (what knowledge is returned) is front-loaded. Every phrase earns its place.
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 simple one-parameter tool, the description gives a reasonable outline of the returned content. However, with no annotations, no output schema, and no mention of table-name provenance or relationship to describe_table, there are noticeable gaps that could leave an agent uncertain about exact invocation behavior or alternatives.
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 mentions 'a table' as the subject, aligning with the single table parameter, but it does not specify whether the value should be a table name, fully-qualified identifier, or display label, nor does it describe any formatting constraints. This is minimal compensation for a low-coverage 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?
The description names a specific resource ('knowledge for a table') and enumerates concrete content components: purpose, column meanings, NL->SQL examples, and gotchas. It is clear what the tool does and, to some degree, what it returns, though it does not explicitly contrast itself with the sibling describe_table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: an agent would call this when it needs rich semantic context about a table rather than just its schema. However, there is no explicit guidance about when to prefer this over describe_table or search_knowledge, nor any exclusions or prerequisites such as requiring a table name from list_tables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_familiesB
List lens families and their tables.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 of behavioral disclosure. 'List' implies a read-only operation, but the description does not state whether it is safe/idempotent, what the output shape is, whether results are paginated, or any other behavior. More transparency would be needed for a tool with no annotations.
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 a single, front-loaded sentence with no wasted words. It is appropriately concise for a zero-parameter tool, though it borders on underspecified.
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 zero-parameter listing tool, the description covers the basic action and resource. However, with no output schema and no elaboration on what 'lens families' are or how this differs from list_tables, an agent may not fully understand the tool's place in the broader context.
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 has zero parameters, so there is nothing for the description to explain. The baseline of 4 applies because parameter semantics are not a concern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('lens families and their tables'), which conveys what the tool does. It is somewhat differentiated from sibling tools like list_tables by the 'lens families' qualifier, though the term 'lens' is not explained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus alternatives such as list_tables or describe_table. The description provides no context about selection criteria, prerequisites, or relationships to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesC
List catalog tables with purpose. Optional family filter.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No |
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 of behavioral disclosure. It only states the basic action and an optional filter; it does not mention return format, pagination, ordering, or what 'purpose' means. There is no indication of side effects, but the read-only nature is implied by 'List' rather than explicitly disclosed.
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 very short and front-loads the main verb and resource. Both sentences serve a purpose, though the second sentence is a sentence fragment. It is appropriately sized for such a simple tool, though the phrase 'with purpose' is slightly vague and could be clearer.
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 tool with one optional parameter and no output schema or annotations, the description is minimally viable: it states the core operation and the filter. However, it leaves the meaning of 'purpose' unspecified and does not mention that valid family values could come from list_families, so an agent may lack enough context to use it precisely.
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 for the meaning of the 'family' parameter. It does so by calling it an 'Optional family filter', which clarifies that it is optional and serves as a filter. However, it does not specify how the filter matches (exact, partial, etc.) or where valid family values come from, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb and resource: 'List catalog tables' tells the agent exactly what the tool does. The phrase 'with purpose' hints at what is returned, and the resource 'catalog tables' distinguishes it from siblings like list_families, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to choose this tool over siblings such as list_families or describe_table. It does not state prerequisites, exclusions, or scenarios where an alternative would be better. The only additional sentence is about the family filter, which is parameter guidance, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookupC
Retrieve one value from a reference table.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| table_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. 'Retrieve' implies a read operation, but the description does not explain behavior for missing keys, duplicate keys, exact matching, or the return format, which is especially important because there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single seven-word sentence with no filler; the core action and object are front-loaded. It is appropriately concise for a simple lookup tool.
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 tool with no annotations, no output schema, and two required parameters, the description is too sparse. It omits failure behavior and return semantics beyond 'one value', and it does not relate the tool to the reference-table family of sibling tools.
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 for table_id and key. It only implies their roles via 'reference table' and 'one value' without clarifying key format, whether matching is exact, or how table_id identifies a table.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Retrieve') and names the resource ('one value from a reference table'), so the core action is identifiable. However, it does not differentiate the tool from siblings like get_reference or search_lookups, and 'reference table' is left undefined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives such as search_lookups, run_select, or get_reference. The description only states what the tool does, not when it should be preferred or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_modelB
Find which table/family a lens model belongs to.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Find' implies a read-only lookup with no apparent side effects, which is useful baseline information. However, it does not disclose behavior for unknown model names, whether matching is exact or fuzzy, or what exact output shape to expect, leaving clear gaps.
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 a single sentence with no filler, and the action 'Find' is front-loaded. It is concise and easy to parse, though it sacrifices some supporting detail.
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 one-parameter lookup tool with no output schema, the description gives the essential purpose and the kind of result ('table/family'), so an agent could attempt a first call. However, it lacks context about how to choose this tool over sibling lookup/search tools and what happens when no match is found, so completeness is only minimal.
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 schema has one generic 'name' string with 0% description coverage, and the tool description never explicitly says 'name is the lens model name.' Still, since 'name' is the only parameter and the description mentions 'a lens model,' an agent can reasonably infer the connection. No format, pattern, or case-sensitivity details are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') and names the resource ('which table/family a lens model belongs to'), clearly indicating a lookup/mapping operation. It does not explicitly differentiate itself from sibling lookup/search tools or define 'lens model,' but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of the many related siblings such as 'lookup', 'search_lookups', or 'get_reference'. No when/when-not conditions or alternative tool references are provided, so usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_selectB
Run a validated read-only SELECT.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'Validated read-only' conveys that the tool will not mutate data and will validate the query, which is useful. However, it does not disclose what validation entails, potential error behavior, or return format, leaving gaps in transparency.
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 a single, tight sentence with no filler. Both qualifiers ('validated' and 'read-only') add meaningful behavioral information, making it concise and effectively front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no annotations or output schema, the description offers the essential 'this is a SELECT' context, but it lacks guidance on when to choose it over the numerous sibling lookup/search tools, and does not cover expected output or validation limits. The agent is left with significant ambiguity for correct usage.
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 schema has a single 'sql' parameter with 0% description coverage, so the description must compensate. 'Run a validated read-only SELECT' clarifies that the parameter must contain a SELECT statement, which adds meaning beyond just 'string'. Yet it provides no further details on allowed syntax or formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and resource ('a validated read-only SELECT'), making it immediately clear that this tool executes SQL SELECT statements. It effectively distinguishes itself from the sibling tools, none of which mention SQL or direct query execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus the many lookup/search siblings. It only implies through the word 'SELECT' that it is for SQL queries, but does not state conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_calculatorA
Find optics calculators for a natural-language question. → get_calculator → calculate.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. The verb 'Find' implies a read-only search and the pipeline clarifies it does not calculate or retrieve directly, but the description does not disclose result format, ordering, or behavior when no calculators match.
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 a single focused sentence plus a compact workflow arrow. It is front-loaded with the main purpose and contains no filler, though it is terse enough that some parameter guidance is omitted.
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 simple two-parameter search tool, the purpose and next-step workflow are reasonably clear. However, with no output schema and no annotations, the description does not explain what the search result looks like or how top_k affects the response, leaving some inference burden on the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does connect 'query' to a natural-language question, but 'top_k' is not explained at all, and the description adds no detail about how results are ranked or filtered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a clear resource ('optics calculators'), and the input style ('natural-language question'). The arrow to get_calculator and calculate clearly distinguishes this as the discovery step among its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The arrow '→ get_calculator → calculate' provides an explicit workflow: search first, then retrieve the calculator, then calculate. This gives clear context for when to use the tool, though it does not mention exclusions or when alternative search tools would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledgeC
Find which table/family fits a use-case NL question. → get_table_knowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
TDQS
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 indicates a search/discovery operation and a routing relationship to get_table_knowledge, but it does not disclose the result shape, whether multiple matches are returned, how top_k affects output, or any limitations.
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 two short sentences with no filler. The action verb is front-loaded, and the arrow to get_table_knowledge is a compact, valuable routing instruction that earns its place.
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 tool with no annotations and no output schema, the description is too thin. It leaves gaps around result semantics, top_k behavior, and usage context, and the close sibling search_knowledge_base is not distinguished. An agent would need additional inference to call it confidently.
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 adds meaning for query by specifying it is a natural-language use-case question, but top_k is completely unexplained, and there is no information about ranking, filtering, or expected output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') and names a clear resource: 'which table/family fits a use-case NL question.' It also points to get_table_knowledge as the natural follow-up, which helps orient the agent. However, it does not explicitly contrast itself with similarly named siblings like search_knowledge_base.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The phrase 'use-case NL question' implies a natural-language discovery use case, and the arrow to get_table_knowledge suggests a routing pattern, but no alternatives or exclusions among the many sibling tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledge_baseB
Search EarthTekniks KB (company, platforms, projects, vision fundamentals). Returns ranked snippets + confident flag.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does add useful return-format context ('ranked snippets + confident flag') that is not present elsewhere. However, it does not explain ranking behavior, the meaning of the confidence flag, pagination, or any read-only constraints.
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 two short sentences with no filler. It front-loads the action and resource, then adds return-value detail. Every word earns its place.
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?
There is no output schema, so the description's mention of return data is valuable. However, with no annotations, no parameter semantics, and no usage guidance relative to several similarly named siblings, the description is not fully complete for an agent to reliably select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not mention either parameter. 'Query' is inferable from the word 'Search', yet 'top_k' is completely unexplained in terms of its effect on results, default behavior, or acceptable values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a clear resource ('EarthTekniks KB'), and the scope of that resource ('company, platforms, projects, vision fundamentals'). It also indicates what is returned ('ranked snippets + confident flag'), making the tool's core purpose clear. However, it does not distinguish this from the sibling 'search_knowledge' tool, which has a very similar name and likely overlapping function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention any alternatives. With many sibling tools like 'search_knowledge', 'search_lookups', and 'get_reference', the agent is left to infer when this tool is the right choice rather than being directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_lookupsC
Find reference/lookup tables (sensor sizes, f-stops, pixel formats). → get_reference → lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
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 of behavioral disclosure. It says the tool finds reference/lookup tables and suggests downstream tools, but it does not disclose what the search returns, how results are ordered, whether matches are approximate or exact, or any pagination/limit behavior. This leaves important execution behavior unexplained.
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 short and front-loaded with the core purpose, which is good. However, the '→ get_reference → lookup' notation is cryptic and interrupts the natural reading flow. It earns some value by suggesting follow-ups, but it is not presented in a clear, structured way.
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, no annotations, and 0% parameter documentation, the description alone must give an agent enough context to invoke the tool correctly. It provides examples and a follow-up chain, but it omits the return shape, result semantics, and how the query/top_k parameters affect behavior, leaving the tool incompletely specified.
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 description does not explain the 'query' or 'top_k' parameters directly. The examples ('sensor sizes, f-stops, pixel formats') weakly suggest what queries may contain, but the description does not clarify how top_k affects results or what format the query should take, so it does not sufficiently compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Find') and a clear resource ('reference/lookup tables'), with concrete examples such as sensor sizes, f-stops, and pixel formats. This distinguishes it from general search tools and gives an agent a clear idea of the tool's domain, though the arrow notation adds mild ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when searching for reference/lookup tables rather than documents, calculators, or products. The 'get_reference → lookup' chain hints at the expected follow-up workflow, but there is no explicit statement of when not to use this tool or how it compares to alternatives like search_knowledge_base.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsC
Filtered search over one table or family. filters: [{column, op, value}].
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| table | No | ||
| family | No | ||
| columns | No | ||
| filters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says this is a 'filtered search' and sketches the filter shape, leaving out whether the operation is read-only, what happens with invalid filters, how results are ordered, or how limits behave.
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 short, front-loaded with the core purpose, and contains no filler. The filter-format hint is useful, though the brevity leaves several parameters unexplained.
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?
Given six parameters, no annotations, no output schema, and many similar sibling tools, the description is too sparse. An agent would still need to guess about valid filter operators, the meaning of sort/columns/limit, and whether table and family are mutually exclusive.
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 adds meaning for 'filters' via the [{column, op, value}] shape and partially explains table/family scope, but it does not explain sort, limit, columns, valid operators, or how table and family relate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and scope: a filtered search over one table or family. It is more specific than the bare tool name, but it does not differentiate this tool from siblings like run_select, search_lookups, or search_knowledge_base.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use search_products versus the many sibling search/query tools. The phrase 'over one table or family' hints at scope constraints, but it never says when this tool should be chosen or avoided.
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.
17 tool updates
v0.1.0- First observed
calculate - First observed
describe_table - First observed
get_calculator - First observed
get_document - First observed
get_product - First observed
get_reference - First observed
get_table_knowledge - First observed
list_families - First observed
list_tables - First observed
lookup - First observed
lookup_model - First observed
run_select - First observed
search_calculator - First observed
search_knowledge - First observed
search_knowledge_base - First observed
search_lookups - First observed
search_products
TDQS
Scored across 17 tools
The set has several similarly named tools, especially search_knowledge vs search_knowledge_base and lookup vs lookup_model, which could cause misselection. However, the descriptions include distinct target objects and explicit workflow arrows (search → get → execute) that mostly help an agent separate calculators, lookups, tables, and products.
Most tools follow a consistent verb_noun snake_case pattern such as get_document, search_products, list_tables, and describe_table. The main deviations are the bare verbs calculate and lookup, plus the confusingly parallel search_knowledge and search_knowledge_base names.
At 17 tools, the server sits in the heavy range and feels padded by the repeated search → get → execute triads for calculators, lookups, and table knowledge. Each tool does have a distinct role, but the count is borderline for smooth agent navigation.
The read-only surface covers the main domains: KB documents, calculators, reference lookups, product specs, and catalog SQL queries with no obvious dead ends. Minor gaps exist—like no browse-all for calculators or lookups and no document listing—but the search tools provide workable entry points.
Maintenance
Related MCP Connectors
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Tested financial & practical calculators as free, no-auth MCP tools for AI agents.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a comprehensive set of mathematical functions as MCP tools, enabling language models to perform calculations including arithmetic, trigonometry, logarithms, and more.41 npm1MIT
- FlicenseNot gradedqualityDmaintenanceA collection of production-ready MCP tools for common tasks such as web search, code execution, file operations, and database queries, enabling AI agents to perform these actions through a unified interface.-
- AlicenseAqualityFmaintenanceProvides 14 MCP tools for AI agent infrastructure, enabling knowledge base queries, skill search, handoffs, blueprint validation, trust scoring, identity verification, SLA validation, and compliance checks.22MIT
- FlicenseNot gradedqualityBmaintenanceExposes 20 deterministic tools for finance, data, content, and lifestyle tasks via MCP, A2A, and REST interfaces, enabling automation and multi-agent workflows.-