emem — Earth memory protocol
Server Details
Content-addressed, ed25519-signed memory of every place on Earth. Apache-2.0, no keys for reads.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- Vortx-AI/emem
- GitHub Stars
- 30
- Server Listing
- emem
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 80 of 80 tools scored. Lowest: 3.1/5.
Most tools have distinct purposes, but there are overlapping groups (e.g., recall variants, state tools) that could cause misselection without careful description reading. The detailed descriptions help disambiguate, but the sheer number increases chance of confusion.
Tools follow a mostly consistent pattern with emem_ prefix and descriptive snake_case names, though some mix noun and verb styles. Memory tools follow a separate but internally consistent pattern. Overall consistent enough for agents to predict tool names.
With 80 tools, the server is far beyond typical scope. Many tools are specialized or registry lookups that could be combined. The tool count is excessive and likely to overwhelm agents, reducing coherence.
The tool set comprehensively covers the earth memory domain: place resolution, band recall, algorithms, comparisons, time series, event detection, memory management, and verification. No obvious gaps for the stated purpose.
Available Tools
81 toolsemem_airAir-quality snapshot (CAMS PM2.5 / NO2 / O3)ARead-onlyIdempotentInspect
Recall Copernicus CAMS air-quality bands at a place: PM2.5 + NO2 + O3. Composes locate → recall → aggregate.
When to use: Use when the user names a place and asks about air quality, pollution, or emissions exposure. CAMS is the European reanalysis — global coverage, ~0.4° native (resampled). For finer-grained urban PM2.5, pair with /v1/at-style stations data when available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the description does not need to repeat safety aspects. The description adds value by explaining the composition (locate → recall → aggregate) and the data source/resolution. No contradictions with 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 extremely concise: three sentences covering purpose, usage, and a pairing suggestion. No redundant information, and the most critical information is 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?
Given the tool's complexity (8 parameters, no output schema), the description provides a clear purpose, usage context, and data source. It lacks details on the return format or what 'aggregate' means, but the annotations and schema cover safety and parameter details. The description is sufficiently complete for an agent to understand when and how to use the 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?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds context by naming the default band set (PM2.5, NO2, O3), which is not in the schema, helping the agent understand what the tool retrieves by default.
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 the tool recalls CAMS air-quality bands (PM2.5, NO2, O3) at a place, using a compose of locate, recall, and aggregate. The title reinforces the specific pollutants. This distinguishes it from sibling tools like emem_at or emem_weather.
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 'When to use' section explicitly advises using this tool when a user asks about air quality, pollution, or emissions exposure. It also provides context about CAMS data and suggests pairing with finer-grained stations data for urban PM2.5, offering an alternative. However, it does not explicitly state when not to use it or list specific sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_algorithmsComposition recipes (algorithms)ARead-onlyIdempotentInspect
Content-addressed dictionary of composition recipes — formulas that fuse attested band facts (and embeddings) into derived scores, classifications, and similarity metrics.
When to use: Call when the user's question is COMPOSITE (flood risk, urban density, water consensus, change-since-2020) rather than a single band readout. Each entry has kind (solo | combined | embedding), the input bands (assemble one emem_recall body from them), the formula in plain math, the output shape, and a citation. The agent applies the formula in-process and quotes the algorithm key + algorithms_cid (from emem_manifests) alongside the input fact_cids — that gives the receipt enough context for any other operator to replay the same composition deterministically. Embedding entries (cosine, novelty, change, neighborhood-consistency) operate on geotessera; for the most common k-NN pattern the protocol-native emem_find_similar is faster than fetching vectors and computing locally.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) are present and the description adds rich behavioral context: entries contain kind, bands, formula, output, citation; the agent applies formulas in-process and quotes keys for replayability. No contradiction with 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 somewhat lengthy but front-loaded with the core purpose and usage guidelines. Every sentence adds value, though a slightly more streamlined structure could improve conciseness.
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 parameters and no output schema, the description covers all necessary context: what the tool contains, how entries are structured, when to use, and how to apply the results. It leaves no gaps for an AI 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?
The input schema has zero parameters, so baseline is 4. The description does not need to add parameter info, but it explains what the tool returns (a dictionary of recipes), fulfilling the need for a parameterless tool.
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 the tool is a 'content-addressed dictionary of composition recipes' that fuses band facts into derived scores, classifications, and similarity metrics. It distinguishes itself from sibling tools that likely handle single band readouts or data retrieval, making the purpose highly specific.
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?
Explicitly tells when to use: for composite questions like 'flood risk' versus single band readouts. It also points to an alternative tool ('emem_find_similar' is faster for k-NN patterns), providing clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_askAsk a free-text question about a placeARead-onlyIdempotentInspect
Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts. Forwards a place mention plus a question; runs the locate → recall → algorithm chain server-side; returns one packaged envelope.
When to use: Use when the question concerns a specific real-world place and a packaged, citation-bearing answer is preferable to manual primitive composition. Forward the user's question verbatim as q plus the location as place (free text), cell (cell64), or lat+lng. The server resolves the location, classifies the question to a topic, recalls every relevant band (auto-materializing Sentinel-2 / Sentinel-1 / Cop-DEM / JRC GSW / Overture / weather on miss), surfaces the algorithm recipes that compose those bands into named scores, and returns a single envelope with topic_routing, facts, algorithms_for_question, an optional Sentinel-2 RGB scene URL, and a caveats block (grid resolution, revisit cadence). All facts are signed by the responder; the signed receipt (and its content-addressed fact_cids) is surfaced at the envelope ROOT — response.receipt / response.fact_cids — exactly like every other primitive, and is also mirrored under facts_summary.receipt for back-compat. Set include_image: true to bundle the latest cloud-free Sentinel-2 thumbnail. Out-of-scope questions return topic_routing.matched_topic: null plus the full inventory so the caller can route elsewhere.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | User's natural-language question about the place (e.g. "is this neighbourhood flood-prone"). | |
| lat | No | WGS-84 latitude (paired with `lng`; alternative to `place` / `cell`). | |
| lng | No | WGS-84 longitude (paired with `lat`). | |
| cell | No | cell64 string (alternative to `place` — use when you have one from a prior emem_locate / emem_recall response). Provide this OR `place` OR `lat`+`lng`. | |
| place | No | Free-text place name (e.g. "Mount Fuji", "Ashok Nagar, Ranchi"). REQUIRED unless `cell` or `lat`+`lng` is provided. Extract the noun phrase from the user's turn; the responder geocodes via OSM Nominatim. | |
| include | No | Opt-in heavy response sections. Default response is slim (~5 KB): answer + algorithm key + fact_cids + caveats. Name specific sections to include them. Ignored when verbose=true (which includes everything). | |
| verbose | No | When true, return the full envelope: per-algorithm formula strings, temporal_recipe blocks, per-fact band_metadata duplicates, and the long _explanation prose. Default (since 2026-05-05) is false so the response fits MCP's 25 KB cap; the signed receipt + fact CIDs + algorithm keys + algorithms_cid are always retained. Pass true to get the full body when debugging. | |
| include_image | No | Bundle a Sentinel-2 RGB scene URL for the resolved cell. Adds ~1-2 s on first call. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds significant behavioral context: the server-side chain, auto-materialization of bands on miss, signed receipts with fact_cids at root, default slim response, the effect of verbose and include_image on latency and size, and the envelope structure. No contradictions with annotations. Misses details on error handling or rate limits, but overall strong.
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 comprehensive but verbose, with several long paragraphs. The first sentence is a good summary, but the detailed breakdown of the process, response structure, and parameter nuances could be more concise. For a tool of this complexity, the length is partly justified, but it could be structured more efficiently with bullets or shorter sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description thoroughly explains the return envelope: topic_routing, facts, algorithms_for_question, optional scene URL, caveats, receipt, fact_cids. It covers default slim response vs verbose, behavior for out-of-scope questions, and the location resolution process. Given the tool's complexity (8 parameters, server-side chain), this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. The description enriches parameters by explaining that cell64 comes from prior emem_locate/emem_recall, place is geocoded via Nominatim, include array enum options are listed, verbose default respects MCP cap, and include_image adds latency. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Ask a free-text question about a place' and the first sentence clearly state the tool's function: single-shot free-text answer backed by signed receipts. It distinguishes itself from siblings by emphasizing a packaged, citation-bearing answer versus manual primitive composition, and by mentioning the server-side locate→recall→algorithm chain, which is unique among the many sibling 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?
Explicit 'When to use' section states the tool is for specific real-world places when a packaged answer is preferred over manual composition. It provides guidance on parameter selection (q verbatim, place/cell/lat+lng) and explains how to handle out-of-scope questions (topic_routing.matched_topic: null with full inventory to route elsewhere). This clearly delineates when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_atMulti-band snapshot at a placeARead-onlyIdempotentInspect
One-shot multi-band recall at a place (or lat/lng). Defaults to emem's standard at-a-glance band set; pass band / bands to override. Polygon-resolved places stay at the centroid by default (n_cells: 1) to keep multi-band calls cheap — pass n_cells: 2..=64 to fan out.
When to use: Use when the user names a place and wants the standard situational readout (vegetation + elevation + landcover + recent weather) without picking bands. Polygon-aware: place that resolves to a polygon (park, lake, district) lands at the centroid unless n_cells widens it. For a single band, use the domain-specific shortcuts (emem_ndvi, emem_air, …) or emem_recall directly.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses polygon centroid behavior, cost implications of n_cells, and the MCP size cap affecting default response. No contradictions with 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 concise with two focused paragraphs. The first paragraph defines core functionality, the second provides usage guidance, with no unnecessary words.
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 no output schema, the description effectively covers return intent (standard situational readout) and response size limits. It could be more explicit about coordinate format, but overall adequately 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?
While schema covers parameter descriptions, the description adds context on default band sets, polygon fan-out mechanics, and how the 'include' parameter affects response size, providing extra meaning.
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 the tool performs a 'one-shot multi-band recall at a place' with a default band set. It differentiates from siblings by noting single-band shortcuts and emem_recall for direct use.
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 explicitly specifies when to use: 'when the user names a place and wants the standard situational readout without picking bands.' It also provides when-not-to-use by directing to single-band tools or emem_recall for specific cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_backfillMaterialize historical facts in a windowARead-onlyIdempotentInspect
Materialize and sign every per-tslot fact for one (cell, band) inside a [start_unix, end_unix] window. Returns a signed list of (tslot, fact_cid, status) for each step. Slow but possible — one upstream fetch per tslot, capped by max_facts.
When to use: Call when the user wants HISTORY for a fast/medium-tempo band and emem_trajectory returned only the latest point. The responder iterates the tslot range derived from the band's tempo, calls the per-tslot historical materializer, signs each result, and persists. After completion emem_trajectory over the same window returns the full series. Bands without a historical materializer (e.g. weather.* from met.no's nowcast) return status: "present_only" for past tslots — check emem_coverage_matrix.history_available_from/history_available_to to see how far back each band can be backfilled. Prefer this over staking an attestation when the upstream is publicly fetchable.
| Name | Required | Description | Default |
|---|---|---|---|
| band | Yes | Band key. Must be a band whose materializer supports historical fetch — see `emem_coverage_matrix` field `history_available_from`/`history_available_to`. | |
| cell | Yes | cell64 or place name (auto-resolved). | |
| end_unix | No | Window end as Unix epoch seconds (UTC). Defaults to now. | |
| max_facts | No | Cap on number of facts materialized in one call. | |
| start_unix | No | Window start as Unix epoch seconds (UTC). Defaults to the band's `history_available_from`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds performance context ('slow but possible', 'one upstream fetch per tslot, capped by max_facts') and explains post-condition (emem_trajectory returns full series after completion). It also notes limitations for certain bands ('present_only' status). No contradiction with 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 well-structured, starting with core action, then return type, performance caveat, and usage guidance. It is concise but includes necessary context, though slightly longer than minimal.
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 100% schema coverage, no output schema, and moderate complexity, the description covers purpose, usage, behavior, limitations, and cross-references other tools. It adequately prepares an agent to 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 coverage is 100%, so baseline 3 is appropriate. The description does not add much beyond the schema's parameter descriptions (e.g., band must support historical fetch, cell auto-resolves). The narrative integrates parameters but adds no new semantic details.
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 the verb ('materialize and sign') and the resource ('per-tslot fact for one (cell, band) in a window'), distinguishing it from siblings like emem_trajectory (which returns only the latest point) and emem_attest (prefer this over staking an attestation). The return type is also specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section guides the agent to call this tool when history is needed and emem_trajectory returned only the latest point. It also advises against staking attestations when the upstream is publicly fetchable, and directs to check emem_coverage_matrix for band history availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_bandsActive band ontologyARead-onlyIdempotentInspect
Active band ontology (offsets, dims, tempo, privacy).
When to use: Call once at session start to learn the band registry — every other primitive's band argument MUST come from this list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. The description adds that the ontology is 'Active' and includes specific fields (offsets, dims, tempo, privacy), giving context about the data returned. It does not contradict 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?
Two sentences, no wasted words. The first sentence states what the tool returns, the second gives clear usage guidance. Well-structured and 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 tool with no parameters and no output schema, the description explains the content (offsets, dims, tempo, privacy) and usage. It doesn't describe the output format explicitly, but but the domain (ontology) implies a structured list. Adequate.
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 schema_description_coverage is 100%. The description does not need to explain parameters. Baseline 4 is appropriate.
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 'Active band ontology' which implies a listing, and elaborates with 'offsets, dims, tempo, privacy'. While not using a verb like 'list' or 'get', the purpose is clear in context. The 'When to use' section further clarifies its role as a registry. It distinguishes from siblings like emem_compare_bands by establishing this as the source of band names.
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?
Explicitly states 'Call once at session start to learn the band registry' and mandates that 'every other primitive's `band` argument MUST come from this list.' This provides perfect guidance on when and why to use this tool, including a crucial dependency rule for other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_benchmarkHand-verified eval items for agent gradingARead-onlyIdempotentInspect
Hand-verified evaluation items for grading an agent against the responder. Returns {items[], grader_url}. Submit answers (cell64 or fact_cid per item) to POST /v1/benchmark/grade for per-item scores. Items today: elevation recall, NDVI, find_similar neighbours.
When to use: Call once at agent-onboarding time (or in CI) to fetch the canonical task list, then have the agent answer each item using its normal tool routing, and POST the answers map to /v1/benchmark/grade for a deterministic score. Lets an operator regression-check that an agent build still hits ground truth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, not destructive. Description adds context (returns items and grader URL, hand-verified, submission endpoint). Could mention potential errors or limits, but adequate.
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 concise paragraphs with front-loaded purpose and clear structure. Every sentence adds value, no redundancy.
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?
Tool has zero parameters, no output schema, but annotations cover safety. Description fully explains what it returns, how to use it, and follow-up step. Complete for a simple fetch 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?
No parameters; schema coverage 100%. Baseline is 4. Description doesn't need to add parameter info, but clarifies return format and usage, adding value.
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 clearly states the tool returns hand-verified evaluation items for grading an agent, with examples of items (elevation recall, NDVI, find_similar neighbours). This is specific and distinguishes from 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?
Explicitly tells when to use (onboarding or CI), how to use (fetch once, answer items, POST to /v1/benchmark/grade), and purpose (regression check). No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_burn_severityBurn severity (dNBR, Key & Benson) from pre/post-fire NBRARead-onlyIdempotentInspect
Compute the differenced Normalized Burn Ratio (dNBR = NBR_pre − NBR_post; Key & Benson 2006) and map it to the USGS burn-severity classes (unburned / low / moderate-low / moderate-high / high). Supply nbr_pre + nbr_post (pin the scenes bracketing the fire date) for a correct result, or omit both to use the two most-recent stored indices.nbr scenes (older=pre, newer=post) as a coarse estimate.
When to use: Call after a wildfire to quantify how badly an area burned, or to triage post-fire severity across a region cell-by-cell. Best practice: explicitly pass nbr_pre/nbr_post from scenes that bracket the known fire date — the stored-trajectory fallback just takes the two most-recent scenes and may not bracket the fire. Surface dnbr and severity_class. For active-fire detection use emem_hunt with the wildfire event instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. | |
| nbr_pre | No | Pre-fire NBR. Pin the scene just before the fire date for a correct result. | |
| nbr_post | No | Post-fire NBR. When both nbr_pre and nbr_post are omitted the endpoint uses the two most-recent stored indices.nbr scenes (older=pre, newer=post). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint false) are consistent. Description adds behavioral details: it computes and maps, can use stored trajectory, warns about fallback limitations, and mentions output fields (dnbr, severity_class). No contradictions.
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?
Concise two-paragraph structure: first paragraph defines the computation, second provides usage guidance and alternatives. Every sentence adds value with no redundancy.
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?
Covers algorithm, input options, best practices, output hints, and sibling differentiation. No output schema, but description sufficiently indicates what is surfaced. Complete for agent decision-making.
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 100%, but description adds context: explains the fallback behavior when parameters are omitted and advises to pin scenes around fire date for correct results. This adds value beyond 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 clearly states it computes dNBR and maps to USGS burn-severity classes, naming the algorithm (Key & Benson 2006) and output classes. It distinguishes from sibling emem_hunt for active-fire detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section provides context and best practices, including explicit parameter passing vs. stored-trajectory fallback, and directs to emem_hunt for active-fire detection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_capabilitiesCached upstream capability snapshotARead-onlyIdempotentInspect
Live capability snapshot of the responder's GPU sidecar — extensions[] (e.g. gpu, clay-v1.5, prithvi-eo2), cuda_available, models_loaded[], healthy, last_polled_unix_s. Refreshed every 30 s by a background poller; reads are constant-time.
When to use: Call before scheduling a GPU-heavy plan (Clay / Prithvi / Galileo embeddings, foundation-anchored algorithms) so the agent knows whether the GPU tier is up right now without per-request /health round-trips. Pair with emem_topics (its algorithm_availability map says which algorithm keys can run given the current capabilities) and emem_explain_algorithm (full inference-tier metadata per algorithm). When extensions[] is empty the sidecar is unreachable — only CPU/scalar/cached tiers will produce facts; foundation-anchored materializers will sign Absence with gpu_unavailable reason.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, destructiveHint. The description adds valuable behavioral context: refresh every 30 seconds, constant-time reads, and behavior when the sidecar is unreachable (empty extensions). No contradiction with 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?
Two paragraphs with clear front-loading: first sentence states the tool's purpose and output fields. Second paragraph provides usage guidance. Every sentence adds value, no redundancy.
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 no input parameters and no output schema, the description covers refresh interval, constant-time reads, when to use, pairing with siblings, and failure mode. An agent has all necessary information to invoke 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?
Input schema has zero parameters, so baseline is 4. Although the description lists output fields (extensions[], cuda_available, etc.), this is not required for parameter semantics but adds context. No input parameters need explanation.
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 it provides a 'live capability snapshot' of the GPU sidecar, listing specific fields (extensions[], cuda_available, etc.). It distinguishes itself from sibling tools like emem_topics and emem_explain_algorithm by explaining how they complement each other.
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?
Explicitly states 'When to use: Call before scheduling a GPU-heavy plan...' and provides guidance on pairing with emem_topics and emem_explain_algorithm. Also describes what to do when extensions[] is empty, covering both usage and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_cell_geojsonCell polygon as GeoJSONARead-onlyIdempotentInspect
Cell polygon as a native MCP EmbeddedResource (mimeType application/geo+json). Properties carry centre lat/lng, bbox, approx size in metres, and the 8-cell neighbourhood — drop straight into Mapbox / Leaflet / Deck.gl / QGIS without a GIS pipeline.
When to use: Call when the agent (or a downstream renderer) needs the cell as geographic geometry — for map overlays, polygon-clipping ops, or feeding a styling pipeline. Pass cell as cell64 or place name. The result is a GeoJSON Feature with Polygon geometry; for a FeatureCollection that includes every recalled fact's value as a property, fetch /v1/cells/{cell64}/recall_geojson?bands=... over plain REST instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and isIdempotent=true, indicating a safe read operation. The description adds context about the output being a GeoJSON Feature with specific properties, complementing the annotations without contradiction.
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 concise at three sentences, front-loaded with key information, and includes a separate usage section. It is well-organized but could be slightly more compact.
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 the tool's simplicity (one parameter, no output schema), the description fully explains the output format and properties, and even provides an alternative approach. It is complete for an agent to understand and use 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?
The sole parameter 'cell' is described in the schema as 'cell64 or place name', and the description only repeats that information. With 100% schema coverage, the description adds minimal additional semantic value beyond restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns a cell polygon as GeoJSON, specifying mimeType, properties, and usage for mapping libraries. However, it does not explicitly differentiate from sibling tools, though the unique function is evident.
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 includes a dedicated 'When to use' section that specifies scenarios like map overlays and polygon-clipping ops, and also provides an explicit alternative (REST endpoint for FeatureCollection) for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_cell_scene_rgbSentinel-2 true-colour thumbnail (PNG)ARead-onlyIdempotentInspect
True-colour Sentinel-2 L2A RGB thumbnail centred on a cell. PNG returned as a native MCP ImageContent block (mimeType image/png). Pure-Rust pipeline: STAC search + HTTP-Range COG reads + 2-98 percentile stretch + PNG encode.
When to use: Call when the user wants a VISUAL of a place — 'show me what this looks like', 'before/after the flood', 'is there a forest here', 'is this developed'. Returns a 256×256 px RGB image (~2.56 km × ~2.56 km at S2's 10 m native resolution), centred on the cell. Pass cell as a cell64 string OR a place name (auto-resolved). max_cloud filters scenes by eo:cloud_cover (default 20 %); raise it (60–80 %) for cloud-prone tropics if you keep getting 'no scene' errors. datetime is an RFC 3339 interval like "2024-01-01T00:00:00Z/2024-12-31T00:00:00Z" for a temporal slice (defaults to last 90 days). structuredContent carries the STAC item id, capture time, cloud_cover, EPSG, and per-channel reflectance percentile stretch values used — quote those alongside the image so the receipt is reproducible.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name | |
| datetime | No | RFC 3339 interval; defaults to last 90 days | |
| max_cloud | No | max eo:cloud_cover percent |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses internal pipeline (STAC search, HTTP-Range COG reads, percentile stretch, PNG encode) and output details (structuredContent fields include STAC item id, capture time, cloud_cover). Annotations already indicate readOnly, idempotent, open world; description adds substantial behavioral context without contradiction.
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?
Well-structured with pipeline summary, usage guidance, and parameter details. Slightly verbose but every sentence adds value. Could be tightened but still effective.
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?
Completely covers the tool's purpose, output format (ImageContent block with structuredContent), parameter nuances, and usage scenarios. No output schema exists, but description adequately explains return values.
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?
Adds significant meaning beyond schema: cell can be place name auto-resolved, max_cloud default 20% with advice to raise in tropics, datetime defaults to last 90 days. Schema already has 100% coverage, but description enriches usability with practical 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?
Clearly states verb 'returns' and resource 'Sentinel-2 true-colour RGB thumbnail centred on a cell'. Includes specific technique (2-98 percentile stretch) and output format (PNG ImageContent block). Differentiates from sibling tools by focusing on visual true-colour thumbnails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section with concrete examples ('show me what this looks like', 'before/after the flood'). Provides advice on raising max_cloud for tropics. Lacks explicit when-not-to-use guidance but gives clear situational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_compareCompare two cells (cosine + scalar deltas)ARead-onlyIdempotentInspect
Compare two cells: cosine similarity over shared vector bands + per-band scalar deltas.
When to use: Call when the user asks 'how similar is X to Y', 'compare these two places', or wants a difference vector. Returns a single cosine score and per-band deltas.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | cell64 of cell A | |
| b | Yes | cell64 of cell B | |
| family | No | optional band-key prefix (e.g. 'indices.') |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that the tool returns a cosine score and per-band deltas, which is beyond the annotations and useful. No contradictions.
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 sentences plus a usage note. No redundant information; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description explains the return format (cosine score + per-band deltas). For a comparison tool, this is sufficient. Could mention normalization but not necessary.
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 100% with descriptions for all parameters. The description does not add further semantic detail beyond the schema, but the baseline of 3 is appropriate.
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 specifies the verb ('compare'), resource ('two cells'), and methodology ('cosine similarity over shared vector bands + per-band scalar deltas'). It differentiates from siblings like emem_compare_bands and emem_diff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger phrases are provided ('how similar is X to Y', 'compare these two places', 'difference vector'). However, it lacks guidance on when not to use this tool or mention alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_compare_bandsCompare two bands at one cellARead-onlyIdempotentInspect
Compare two bands at the same cell. Scalar pair → metric=delta, value=b-a. Vector pair (equal dim) → metric=cosine + per-dim delta. Returns a signed receipt naming both source fact CIDs.
When to use: Call when the user wants cross-source consistency at one place ('does Cop-DEM agree with GMRT here?'), cross-vintage drift ('how did the embedding change between 2017 and 2024 at this cell?'), or any band-vs-band comparison within a single cell. cell + a + b are required. tslot_a/tslot_b are OPTIONAL: omit them to let the responder auto-pick each band's latest attested tslot — required for medium/fast-tempo bands (NDVI 30-day, MODIS 8-day, weather, CAMS) where there is no fact at tslot=0. The response carries tslot_resolution (echoes what was chosen and why) and bands_with_no_history (lists any band the cell has no attested fact for).
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | band A key (e.g. 'copdem30m.elevation_mean') | |
| b | Yes | band B key (e.g. 'gmrt.topobathy_mean') | |
| cell | Yes | cell64 (`cell64` accepted as alias) | |
| tslot_a | No | tslot for band A. Omit to auto-pick the latest attested tslot for this band at this cell — required for medium/fast-tempo bands (NDVI 30-day, MODIS 8-day, weather, CAMS) which have NO fact at tslot=0. The response carries `tslot_resolution.per_band.tslot_used_a` so you see which slot was chosen. | |
| tslot_b | No | tslot for band B. Same auto-pick semantics as `tslot_a` when omitted. | |
| predicate | No | Optional consistency predicate. When set, the response carries a signed `verdict` (true|false|incomparable) over the comparison. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds significant behavioral details: comparison logic, receipt structure, tslot resolution, and bands_with_no_history. No contradiction with 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?
Well-structured with front-loaded purpose, clear sections, and no redundant information. Every sentence contributes to understanding tool behavior and usage.
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 no output schema, the description covers return values (signed receipt, tslot_resolution, bands_with_no_history) and explains parameter behavior thoroughly. Addresses the tool's complexity adequately.
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 100%, but description enhances understanding with auto-pick semantics for tslot parameters, explanation of predicate's verdict, and mention of response fields. Adds value beyond 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 clearly states 'Compare two bands at the same cell' with specific details on scalar vs vector comparisons and a precise output (signed receipt). It distinguishes itself from sibling tools by focusing on single-cell band comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section lists three concrete scenarios: cross-source consistency, cross-vintage drift, and any band-vs-band comparison within a single cell. It also explains when to omit tslot parameters, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_corpus_state_statsSigned snapshot of corpus livenessARead-onlyIdempotentInspect
Signed snapshot of corpus liveness: distinct_cells, distinct_bands, facts_scanned, top per-band counts, manifest CIDs. Same payload that backs /v1/stream's corpus.state tick (signed). Use this for a one-shot poll instead of holding an SSE connection.
When to use: Call when an agent needs a single liveness reading to surface in a dashboard, attach to a report, or decide whether to refresh local caches. Includes ed25519 signature over a deterministic preimage so the snapshot is verifiable. For a continuous feed, GET /v1/stream over Server-Sent Events instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the tool is a one-shot poll, signed for verification, and matches the streaming tick payload. Annotations already indicate read-only, idempotent, non-destructive; description adds useful context without contradiction.
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 concise paragraphs with clear organization. Title line summarizes content immediately, followed by usage guidance. No wasted words.
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 parameterless tool with no output schema, the description fully explains what is returned, the purpose, and how to use it. The inclusion of signature verification adds completeness.
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?
No parameters exist, so baseline is 4. The description adds value by detailing the output, though parameter semantics dimension is not heavily tested.
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 that the tool returns a signed snapshot of corpus liveness including specific data fields. It distinguishes itself from the continuous SSE stream, providing a clear contrast.
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?
Explicitly provides use cases (dashboard, report, cache refresh) and contrasts with the streaming alternative. Includes guidance on when to use this tool versus the continuous feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_coverage_mapCoverage map (SVG image)ARead-onlyIdempotentInspect
Live SVG render of the responder's corpus density, returned as a proper MCP EmbeddedResource content block (image/svg+xml) — multimodal MCP agents can render it natively.
When to use: Call when the user asks 'where do you have data?', 'show me the coverage', or wants a visual brief of the responder's corpus footprint. Returns a 1440×720 Plate-Carrée SVG (1° × 1° bins, log-scale colour, continent envelopes for orientation) plus a structuredContent summary (cell_count, total_facts, responder pubkey, REST URL). Multi-content-block reply: an EmbeddedResource (mimeType image/svg+xml, with text + uri) followed by a one-line text summary so text-only clients still see the cell / fact counts. For the bare image bytes, fetch /v1/coverage_map.svg over plain REST.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds substantial detail: output dimensions (1440×720), projection (Plate-Carrée), bin size, color scale (log-scale), continent envelopes, and the multi-content-block reply format including an EmbeddedResource and text summary. It also mentions the alternative REST endpoint, exceeding what annotations provide.
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 well-structured with clear sections and no redundancy. It is slightly verbose but every sentence adds value, earning a 4 rather than a 5 due to minor wordiness.
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 no parameters and no output schema, the description is fully comprehensive. It covers the tool's purpose, invocation triggers, output format, dimensions, color scheme, and even an alternative REST endpoint, leaving no gaps for an 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?
With zero parameters, the baseline is 4 per guidelines. The description correctly omits parameter details as none exist, so no deduction is needed.
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 that the tool returns a 'Live SVG render of the responder's corpus density', which is a specific verb+resource combination. It distinguishes itself from siblings by focusing on a visual coverage map, leaving no ambiguity about its purpose.
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 explicitly lists query patterns that trigger this tool ('where do you have data?', 'show me the coverage'), providing clear context. However, it does not mention when not to use it or offer alternatives, so it scores 4 instead of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_coverage_matrixPer-band live status & history boundsARead-onlyIdempotentInspect
Per-band live status — what data is alive AND auto-materializable, with history bounds, tempo cadence, and the responder pubkey that signs the band.
When to use: Call BEFORE emem_recall when you don't know which bands answer at this responder. For each band returns has_materializer (true → an empty recall will auto-fetch+sign, no seeding needed), facts_count (how many cells already cached), last_attested_unix_s (freshness), tempo_seconds (slot duration), history_available_from / history_available_to (oldest/newest Unix epoch the materializer can fetch — use these to bound an emem_backfill request), and responder_pubkey_b32 (the ed25519 key whose signature attests this band — use to detect federation / multi-responder setups). Bands with has_materializer=false AND facts_count=0 are cube placeholders without a wired connector — don't bother recalling them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. The description adds context about the returned fields (e.g., has_materializer, facts_count) and warns about cube placeholders. No contradictions.
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?
Well-structured: a concise summary followed by detailed usage guidance and field explanations. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description thoroughly explains the return fields and their practical implications. Combined with annotations, it provides complete context for using the 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?
There are zero parameters, so baseline 4 applies. The description does not need to add parameter information.
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 the tool's purpose: 'Per-band live status — what data is alive AND auto-materializable, with history bounds, tempo cadence, and the responder pubkey that signs the band.' It distinguishes itself from siblings like `emem_recall` by advising to call this before recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'When to use: Call BEFORE emem_recall when you don't know which bands answer at this responder.' It explains how to interpret each returned field and when to use other tools like `emem_backfill`. It also tells which bands to ignore.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_data_availabilityPer-band temporal coverage catalogARead-onlyIdempotentInspect
Temporal catalog: for every materializable band the upstream-of-record window the data genuinely covers, the temporal kind (static | annual_snapshot | annual_stack | time_series | now_only | per_release), tempo seconds, upstream wire path, and whether emem_backfill is meaningful.
When to use: Call before emem_backfill or any historical recall to check whether a band has a meaningful past at the requested time. Each entry includes history_available_from_unix / history_available_to_unix (and ISO strings) plus backfill_supported. Use this to avoid trial-and-error 422s on now-only bands (weather.*) and to enumerate the per-year geotessera.YYYY vintages the responder ships. The catalog is driven by the same registry the recall path consults — so what it lists is exactly what materializes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds context: catalog is driven by same registry as recall path, so listed items materialize exactly. Makes behavior 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?
Description is front-loaded with key information and structured well. Slightly verbose but every sentence adds value. Could be slightly more concise but overall good.
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 no parameters and no output schema, the description fully covers what the tool returns (history windows, kind, backfill support) and provides clear usage context. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters, so no parameter descriptions needed. Schema coverage is 100%. Baseline score of 4 applies due to zero parameters.
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 clearly states it is a temporal catalog per band, listing history availability, kind, tempo seconds, wire path, and backfill support. It distinguishes from siblings by specifying that it should be called before emem_backfill or historical recall to avoid errors.
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?
Explicitly tells when to use: before emem_backfill or any historical recall, to check if a band has meaningful past. Also mentions what to avoid (trial-and-error 422s on now-only bands) and to enumerate per-year vintages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_deforestation_alertDeforestation alert proxy (NDVI drop + embedding change)ARead-onlyIdempotentInspect
Composite deforestation-alert score: alert_score = 0.5·clamp01(ndvi_drop/0.30) + 0.5·clamp01(embedding_change/0.20), where ndvi_drop = max(0, ndvi_modis_baseline − ndvi_now) and embedding_change = 1 − cos(tessera_latest, tessera_prev). Each half degrades INDEPENDENTLY and honestly: if a band is missing, that half is dropped AND the output is renamed so a half-score can never be mistaken for the full composite. If NEITHER half is computable the response is a signed inconclusive carrying no number.
When to use: Call to flag recent forest-loss-like change at a known cell when you want a single 0..1 alert score rather than a full ensemble. Read the renamed score field and the present/absent halves — don't treat a half-score as the full composite. For multi-cell open-world discovery use emem_hunt (deforestation event); for the three-encoder change ensemble use emem_triple_consensus; for regulatory EUDR evidence use emem_eudr_dds.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: independent degradation when bands are missing, output renaming to avoid confusion, and an 'inconclusive' response when neither half is computable. No contradiction with annotations (readOnlyHint=true is consistent with a nondestructive proxy).
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 front-loaded with the formula and key behavioral notes, then usage guidelines. It is slightly verbose with the mathematical details but each part is relevant and well-organized. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single-parameter input and moderate complexity, the description covers all necessary aspects: formula, edge cases (missing bands, inconclusive), output handling (renamed score), and explicit comparisons to sibling tools. No output schema is present, but the description sufficiently explains the return behavior.
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 100% (the single 'cell' parameter is fully described in schema). The description adds no new semantic meaning about the parameter beyond 'cell64 or place name' and 'known cell' in context, so baseline 3 holds.
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 it is a composite deforestation-alert score using NDVI drop and embedding change, with a specific formula. It distinguishes itself from siblings like emem_hunt, emem_triple_consensus, and emem_eudr_dds by specifying its single-score, known-cell focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section provides clear guidance: use for a single 0..1 alert at a known cell, do not treat half-score as full composite, and directs to emem_hunt for multi-cell discovery, emem_triple_consensus for the three-encoder ensemble, and emem_eudr_dds for EUDR evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_diffSigned delta between two tslotsARead-onlyIdempotentInspect
Compute a DerivativeFact (delta) between a band's values at two tslots.
When to use: Call when the user asks 'what changed between t1 and t2', 'give me the delta'. Returns a signed DerivativeFact + receipt — the delta itself is content-addressed and citable.
| Name | Required | Description | Default |
|---|---|---|---|
| band | Yes | ||
| cell | Yes | ||
| tslot_a | Yes | ||
| tslot_b | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds value beyond annotations by stating the return type (signed DerivativeFact + receipt) and that the delta is content-addressed and citable. No contradictions with 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?
Three concise sentences: purpose, usage, return type. No extraneous information, well-structured for quick parsing.
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 0% schema coverage and no output schema, the description fails to explain key concepts (DerivativeFact, cell) and omits error handling or prerequisites, making it incomplete for reliable invocation.
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 description only explains 'band' and two 'tslots' parameters. The required 'cell' parameter is not mentioned, leaving a significant gap in understanding.
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 clearly states it computes a signed delta (DerivativeFact) between two tslots for a band, distinguishing it from general state diff tools. However, the term 'DerivativeFact' is domain-specific and may require additional context.
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?
Provides explicit usage triggers ('what changed between t1 and t2', 'give me the delta') but does not mention when to avoid this tool or alternative tools like emem_state_diff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_edges_recallRecall temporal knowledge-graph edgesARead-onlyIdempotentInspect
Read temporal knowledge-graph edges (subj --pred--> obj, valid over [valid_from, valid_to)), bi-temporally filtered, in EITHER direction. Forward (subj, direction="out", the default): edges originating at a subject fact. Reverse (obj, direction="in"): edges pointing AT a fact — what disagrees-with / supersedes / relates-to it. Returns a signed list of edges plus the distinct neighbour fact CIDs (objs for out, subjs for in); the receipt commits the returned edge CIDs into its signature preimage.
When to use: Call this to read the typed CONNECTIONS of a fact — what disagrees with it, what superseded it, what relates to it — as of a point in time. A plain recall gives you the fact; this gives you how that fact links to others in the memory graph. Ask it when the user says 'what is this related to', 'what replaced this observation', 'why is this value contested', or 'what did this place's relations look like as of date X'. Pick a direction: set subj (direction="out") to ask 'what does this fact point at'; set obj (direction="in") to ask the REVERSE — 'what disagrees-with / supersedes / points-at this fact'. Set exactly one of subj/obj — an ambiguous or empty request errors honestly rather than returning a silent empty. Pass as_of_tslot to get the latest edge per neighbour whose valid interval covers that moment (newer edges shadow older — nothing is deleted); pass pred (e.g. disagrees_with, supersedes) to filter, or omit it (empty string) for every predicate. Tip: a quicker way to get a fact + its outbound edges in one shot is emem_recall with include:["edges"]. Follow each edge's obj/subj with emem_fetch to resolve the related fact, or emem_verify_receipt to confirm the signature offline.
| Name | Required | Description | Default |
|---|---|---|---|
| obj | No | Object fact CID (reverse, direction="in"): edges TERMINATING at this fact ("what points at this fact" — what disagrees-with / supersedes / relates-to it) are returned. Set exactly one of `subj` or `obj`. | |
| pred | No | Predicate filter (e.g. `replaced_by`, `disagrees_with`, `supersedes`, `co_located_with`). Empty string (default) scans every predicate for the anchor fact. | |
| subj | No | Subject fact CID (forward, direction="out"): edges ORIGINATING at this fact ("what does this fact point at") are returned. Set exactly one of `subj` or `obj`. | |
| limit | No | Max edges to return. | |
| direction | No | Traversal direction. "out" (default) = subj→objs; "in" = obj→subjs. Inferred from which of subj/obj you set when omitted; an ambiguous (both set) or empty (neither set) request is rejected with an honest error, never a silent empty. | |
| as_of_tslot | No | Valid-time bound. Returns the latest edge per neighbour whose [valid_from, valid_to) interval covers this tslot; supersession keeps the newest edge. Omit for all edges regardless of valid-time. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context: returns signed list of edges, receipt commits edge CIDs, no deletion, shadowing with as_of_tslot, error on ambiguous input. No contradiction with 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 lengthy but well-structured with sections: core action, usage, tips. It front-loads important information. Every sentence adds value, though some might consider it verbose for a simple read operation. However, given complexity, it earns its length.
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?
Without an output schema, the description explains return values (signed list of edges, distinct neighbour fact CIDs) and how to use them (follow with emem_fetch or emem_verify_receipt). It covers enough for an agent to correctly invoke and process results. No gaps.
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 100% with all 6 parameters documented. The description adds meaning: explains direction inference from subj/obj, honest error on ambiguous input, as_of_tslot shadowing, pred filter examples. This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads temporal knowledge-graph edges with specific verbs 'Read temporal knowledge-graph edges' and explains the two directions (out/in). It distinguishes from sibling tools like emem_recall by noting that emem_recall gets a fact while this gets connections. The scope and action are unambiguous.
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 explicit when-to-use scenarios: 'what is this related to', 'what replaced this observation', 'why is this value contested'. It also gives a tip for a quicker alternative (emem_recall with include:["edges"]) and warns about ambiguous/empty subj/obj errors. This fully guides selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_elevationCoherent elevation across Cop-DEM + GMRT + WorldCoverARead-onlyIdempotentInspect
One-shot elevation answer that fuses Cop-DEM 30 m (land), GMRT (ocean topobathy), and ESA WorldCover (water mask) into a single signed scalar at a place or coordinate. Returns elevation_m, the source actually used, and a coherence_note when the two surfaces disagree at the coast.
When to use: Use when the user asks 'how high is X' or 'what's the elevation at this lat/lng' and you want the correct answer regardless of whether the cell is land, water, or coastline — the handler picks Cop-DEM for land and GMRT for water and surfaces the choice. Pass place (free text), lat+lng, OR cell. Otherwise, prefer emem_recall with copdem30m.elevation_mean / gmrt.topobathy_mean individually.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. | |
| lng | No | WGS-84 longitude. | |
| cell | No | cell64 string — skip geocoding entirely. | |
| place | No | Free-text place name. Resolved through the standard locate cascade. Provide this OR `lat`+`lng` OR `cell`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the fusion logic (selects between Cop-DEM for land, GMRT for water) and mentions return fields (elevation_m, source, coherence_note). Annotations already indicate read-only, so description adds value without redundancy.
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 concise (about 100 words) and well-structured: purpose first, then usage guidelines, then parameter instructions. Every sentence adds value without fluff.
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 input methods, fusion logic, outputs (including edge case of coastline disagreement), and when to use alternatives. For a tool with no output schema, it provides sufficient context 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 description clarifies the mutual exclusivity of parameters (place, lat+lng, or cell) and provides context for each, such as 'skip geocoding entirely' for cell. This adds meaning beyond the schema descriptions.
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 the tool provides a unified elevation value by fusing multiple datasets. It explicitly contrasts with emem_recall which gives individual dataset values, helping the agent distinguish when to use this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states usage conditions (when user asks 'how high is X' or 'what's the elevation') and provides an alternative tool (emem_recall) for when individual dataset values are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_embedding_centroidEmbedding centroid — mean-pooled GeoTessera vector for a regionARead-onlyIdempotentInspect
Mean-pool the 128-D GeoTessera embedding over a region's cells: centroid = (1/N) Σ v_i, plus the L2-normalised centroid and a content-addressed centroid_cid. The building block region_similarity composes. Region is {place} | {polygon_bbox} | {cells}. NaN dims are averaged over their finite contributors. CPU-only.
When to use: Call when you need one representative embedding vector for an area — to feed similarity search, clustering, or a linear probe over places rather than single cells. Returns a stable centroid_cid for citation. Signed inconclusive when no cell in the region carried a vector.
| Name | Required | Description | Default |
|---|---|---|---|
| cells | No | Explicit cell64 list (taken verbatim, capped by max_cells). Alternative to place/polygon_bbox. | |
| place | No | Free-text place name; resolved through the layered geocoder to a polygon bbox, then sampled. One of place/polygon_bbox/cells required. | |
| max_cells | No | Cap on cells sampled from the region; surfaced as coverage_capped. | |
| polygon_bbox | No | Explicit bbox; sampled on a grid. Alternative to place/cells. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive. The description adds important details: CPU-only, NaN handling, return of centroid_cid, and 'inconclusive' signal when no vectors. No contradictions.
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 well-structured paragraphs: first explains the computation, second gives usage guidance. Efficient and no redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers return values (centroid, normalized, cid) and error conditions. It could detail output structure more, but given complexity, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining the relationship between place, polygon_bbox, and cells as alternatives, and the max_cells cap surfaced as coverage_capped.
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 the tool's purpose: mean-pool the 128-D GeoTessera embedding over a region. It distinguishes from siblings by mentioning region_similarity composes and targeting region-level rather than single-cell use.
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 'When to use' section provides explicit context for using the tool for similarity search, clustering, or linear probes. However, it does not explicitly state when not to use or list alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_embedding_diversityEmbedding diversity — landscape heterogeneity over a regionARead-onlyIdempotentInspect
Quantify how varied a region's landscape is: diversity = (1/(N(N-1))) Σ_{i<j} (1 − cosine(v_i, v_j)), the mean pairwise cosine distance over the region's GeoTessera embeddings. 0 = perfectly uniform; higher = more heterogeneous land cover (a determinantal-point-process / k-medoid diversity). Region is {place} | {polygon_bbox} | {cells}. CPU-only.
When to use: Call for habitat-heterogeneity / biodiversity-proxy inputs, or to tell a monoculture from a mosaic landscape, or to rank regions by how mixed they are. Needs ≥2 embedding-covered cells, else a signed inconclusive. Pair with emem_terrain ruggedness for a fuller heterogeneity picture.
| Name | Required | Description | Default |
|---|---|---|---|
| cells | No | Explicit cell64 list (taken verbatim, capped by max_cells). Alternative to place/polygon_bbox. | |
| place | No | Free-text place name; resolved through the layered geocoder to a polygon bbox, then sampled. One of place/polygon_bbox/cells required. | |
| max_cells | No | Cap on cells sampled from the region; surfaced as coverage_capped. | |
| polygon_bbox | No | Explicit bbox; sampled on a grid. Alternative to place/cells. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds CPU-only constraint, cell requirement, and the inconclusive result. This provides additional behavioral context beyond 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 concise, front-loaded with the definition and interpretation, followed by usage guidelines. Every sentence serves a purpose with no redundancy.
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 the tool's complexity and no output schema, the description covers key aspects: definition, usage, constraints, and a note on inconclusive results. It lacks detail on the signed result but is otherwise sufficient.
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 100%, so parameters are already described. The description adds value by clarifying the region alternatives (place/polygon_bbox/cells) and the cell count requirement, enhancing understanding beyond 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 clearly states the tool quantifies landscape diversity using embeddings, provides the formula, interpretation range, and region specification. It distinguishes itself by mentioning pairing with emem_terrain, implying a complementary role.
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 explicitly says 'When to use' with specific scenarios (habitat-heterogeneity, monculture vs. mosaic, ranking) and a condition (needs ≥2 cells). It does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_errorsStable error code catalogARead-onlyIdempotentInspect
Stable error code catalog.
When to use: Call to enumerate the wire-stable error codes — useful when the LLM wants to programmatically branch on responses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral detail that the codes are 'wire-stable' and 'stable', implying they don't change over time. This goes beyond the annotations (readOnlyHint, idempotentHint, destructiveHint) which already indicate safe, read-only, idempotent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the purpose and usage. Every word is necessary; no fluff or redundancy.
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 the tool's simplicity (no parameters, no output schema, straightforward purpose), the description is fully complete. It tells the agent exactly what the tool does and when to use it.
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 zero parameters, the schema description coverage is 100% by default. The description adds no parameter-specific details, but according to guidelines, a baseline of 4 is appropriate when there are no parameters.
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 explicitly states the tool is a 'stable error code catalog' and uses the verb 'enumerate' to describe its action. It clearly distinguishes itself from the many sibling tools, none of which appear to provide a similar 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 includes a 'When to use' section that explains the tool is for enumerating error codes when the LLM wants to programmatically branch on responses. While it doesn't explicitly state when not to use it, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_eudr_ddsEUDR Due Diligence Statement — polygon-in, signed Annex II envelope outARead-onlyIdempotentInspect
Produce a Due Diligence Statement per Regulation (EU) 2023/1115 for one or more plots. Each plot carries operator-supplied geometry (GeoJSON Polygon for >4 ha, Point for ≤4 ha non-cattle per Article 2(28)), country of production (ISO3), Combined Nomenclature code (HS-6+), and quantity in kg. The endpoint applies the regulation's 10 % canopy / 0.5 ha / 5 m height forest definition (Article 2(4)) using the EU Commission's expected JRC GFC2020 V3 baseline plus Hansen GFC v1.12 loss-year confirmation; Sims et al. 2025 driver attribution and RADD SAR fallback layer on when those connectors are wired (Absence today). The response is an Annex II-shaped envelope with per-plot verdict (pass/fail/not_in_scope/indeterminate/below_mmu), failing-cell fraction, and signed fact CIDs for every per-cell verdict — operators quote them in the company's Article 12 record. Article 9(1)(b) legality (land tenure, FPIC, country-of-origin laws) is structurally out of EO scope; the response carries an explicit legality_disclaimer for that reason.
When to use: Call when a commodity supplier or EU importer needs to evidence due diligence under Regulation (EU) 2023/1115. Use the plot-level signed receipts as evidence inside the operator's company record; pair with a partner legality module before submitting the final DDS to the EU Information System (TRACES NT). For a single plot, pass one entry in plots. For batch supply-chain audits, pass up to a few dozen plots in one call — the endpoint fans out per plot. Surface the failing-cell fraction, the chosen forest baseline, and the legality disclaimer in the user-facing response so the operator understands what the engine claims (and does not).
| Name | Required | Description | Default |
|---|---|---|---|
| plots | Yes | One or more plots to evaluate for EUDR compliance. | |
| operator | No | ||
| cut_off_date | No | EUDR cut-off date in ISO 8601. The regulation's value is 2020-12-31; only loss after this date counts as failure. | 2020-12-31 |
| legality_module | No | Operator-chosen legality provider. Default null surfaces the explicit Article 9(1)(b) out-of-EO-scope disclaimer. | |
| max_cells_per_plot | No | Sample budget per POLYGON plot. Omit to auto-derive from polygon area (~110 cells/ha, clamped to 51,200) so the whole plot is evaluated; EUDR plots are typically large, so do not set a small value unless you have a tight latency budget. POINT plots evaluate at 1 cell. | |
| forest_baseline_override | No | Optional baseline override. Default 'jrc_gfc2020_v3' is the EU Commission's expected (non-binding) baseline. Acceptable: 'jrc_gfc2020_v3', 'hansen_only', 'both'. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses detailed behavioral traits beyond the annotations: forest definition (10% canopy / 0.5 ha / 5 m height), baseline (JRC GFC2020 V3 with Hansen fallback), per-plot verdict types (pass/fail/not_in_scope/indeterminate/below_mmu), inclusion of signed CIDs, and legality disclaimer. It also notes when fallback layers are absent. This fully informs the agent of the tool's behavior and 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 lengthy but well-structured, starting with the core purpose, then input details, then output description, then usage guidance. Each sentence adds necessary information for a complex regulatory tool. However, could be slightly more concise without losing critical details.
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 the tool's complexity (6 parameters, nested objects, no output schema), the description is exceptionally complete. It explains the output format (Annex II envelope, per-plot verdict, signed CIDs, failing-cell fraction, forest baseline, legality disclaimer) and what to surface to the user. No gaps remain for effective agent invocation.
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 description adds significant meaning beyond the input schema. For example, it explains the geometry rule (Polygon for >4 ha or cattle, Point for ≤4 ha non-cattle per Article 2(28)), the interpretation of cut_off_date (only loss after 2020-12-31 counts), the derivation of max_cells_per_plot (auto-derived based on area), and acceptable forest_baseline_override values. With 83% schema coverage, the description enriches understanding of each parameter.
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 the tool's purpose: 'Produce a Due Diligence Statement per Regulation (EU) 2023/1115 for one or more plots.' It specifies the input (plots with geometry, country, commodity code, quantity) and output (Annex II envelope with verdicts). This distinguishes it from all sibling tools, none of which produce EUDR statements.
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 'When to use' paragraph explicitly advises when to call the tool: when a commodity supplier or EU importer needs to evidence due diligence. It recommends pairing with a partner legality module and submitting to TRACES NT. It also clarifies what is out of scope (legality under Article 9(1)(b) is 'structurally out of EO scope'). This provides clear context and alternative/companion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_explain_algorithmOne-algorithm drill-down (formula + inputs + citation)ARead-onlyIdempotentInspect
Per-key drill-down on a single composition recipe — full body (kind, inputs, formula, output, citation, references) for ONE algorithm key. Companion to emem_algorithms (which is the catalog).
When to use: Call when you already know the algorithm key (from emem_algorithms's catalog or the topic registry) and need its full math. Cheaper than fetching the 190 KB catalog when you only need one entry. Returns the same structure that /v1/algorithms/{key} does. 404s with cid_not_found if the key isn't registered — call emem_algorithms for the live key list.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Algorithm key including version suffix, e.g. `walkability_score@1`. Get the live key list from `emem_algorithms`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent. The description adds that it returns the same structure as `/v1/algorithms/{key}` and responds with `cid_not_found` on invalid keys. This adds useful behavioral context beyond annotations, though not extensive.
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 concise, with two focused sentences in the first paragraph and clear bullet-style guidance in the second. Every sentence is purposeful, no fluff, and the critical information is 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?
Given the tool has no output schema, the description outlines the return structure (kind, inputs, formula, output, citation, references) and references the same structure as a known API call. This is sufficient for the tool's moderate complexity, though a bit more detail on output format could be added.
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 100% and the schema already describes the `key` parameter with an example and how to obtain valid keys. The description repeats this context but does not add significant new semantics beyond what the schema provides.
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 the tool's function: 'Per-key drill-down on a single composition recipe — full body ... for ONE algorithm key.' It uses specific verbs ('drill-down') and distinguishes from the sibling `emem_algorithms` (catalog), making the tool's unique role obvious.
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 explicit when-to-use guidance: 'Call when you already know the algorithm key ... and need its full math. Cheaper than fetching the 190 KB catalog when you only need one entry.' It also explains what happens on 404 (key not found) and directs to `emem_algorithms` for the live key list, fully covering usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_fetchResolve a fact by content-address (CID)ARead-onlyIdempotentInspect
Fetch a fact by its content-address (CID). Returns the full signed Primary or Absence fact — the same body served by REST /v1/facts/{cid}. Closes the citation loop: any fact_cid surfaced by recall, materialize, attest, or verify can be re-resolved by another agent without REST.
When to use: Call whenever you have a fact_cid (e.g. from emem_recall's response, an emem_attest receipt, an emem_materializers outcome, or a citation in another agent's reply) and need the full fact body — its value, unit, sources, signer, signed_at, and derivation. Particularly useful for verifying that a citation a downstream agent gave you actually resolves on this responder. The response is byte-identical across responders for the same CID — the CID itself is the validator.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | Yes | Content-address of any persisted fact (Primary or Absence). Returned by every recall, attest, materialize, and verify call as `fact_cid` / `fact_cids`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. Description adds that the response is byte-identical across responders and the CID is the validator. No contradictions; additional context beyond 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?
Concise and well-structured: first sentence states purpose, followed by details and a clear 'When to use' section. Every sentence adds value, no unnecessary words.
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 the tool is simple (one parameter, no output schema), the description fully explains what is returned (fact fields like value, unit, sources, signer, etc.) and the property of byte-identical responses. No gaps.
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 100% with a detailed description of the cid parameter, including its origin from sibling tools. The description repeats this information but does not add new meaning beyond the schema, so baseline 3 is appropriate.
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 the tool fetches a fact by content-address (CID) and returns the full signed fact. It distinguishes itself from siblings by explaining it closes the citation loop, allowing resolution of CIDs from recall, attest, materialize, or verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section details scenarios: whenever a fact_cid is obtained from sibling tools or other agents. It also highlights utility for verifying downstream citations. Clearly defines context without need for exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_field_boundariesPer-field agricultural boundaries (Fields of The World)ARead-onlyIdempotentInspect
Per-field agricultural-boundary polygons from the Fields of The World global product (~3.17B fields, 241 countries, 10 m resolution, CC-BY-4.0). Returns a GeoJSON FeatureCollection with the polygon geometries, FIBOA-compatible properties, and a planar area_m2 per field — plus provenance (source CID, provider URL, license, attribution).
When to use: Call when the user asks about farms, fields, parcels, croplands, plots, or agricultural boundaries inside a region — anywhere the OSM/Nominatim boundary alone is too coarse (the OSM polygon for a farm is its estate envelope; this returns the individual field polygons inside). Pass place (free-text) or polygon_bbox. For farms wider than ~10 km², split the bbox: the fetcher caps each call at 16 covering tiles. The receipt quotes license: CC-BY-4.0 and attribution: Fields of The World / Taylor Geospatial Institute — surface both with any rendered map. For a one-shot "facts at every cell inside the farm PLUS the field polygons", call emem_recall_polygon with include: ["ftw_fields"] instead.
| Name | Required | Description | Default |
|---|---|---|---|
| zoom | No | Web-Mercator zoom level for the FTW PMTiles read. Default = library-picked min(14, archive.max_zoom). Higher zoom = sharper boundaries but more tiles per query (capped internally at 16 — split very wide farms). | |
| place | No | Free-text place/farm/region name; resolved through the same layered geocoder as /v1/recall_polygon. REQUIRED unless `polygon_bbox` is provided. | |
| polygon_bbox | No | Explicit bbox; alternative to `place`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe read-only operation; description adds behavioral details like tile cap (16 tiles per call), output format, and provenance requirements. No contradiction with 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?
Description is front-loaded with key information, well-structured with sections. While somewhat lengthy, every sentence adds value; minor redundancy could be trimmed but overall 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?
Given no output schema, the description thoroughly explains the return structure (GeoJSON FeatureCollection with polygons and properties). Covers provenance, attribution, and constraints like zoom ranges and tile limits, leaving no major gaps.
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?
Input schema has 100% description coverage, so baseline is 3. The description adds value by explaining zoom default behavior, the relationship between place and polygon_bbox, and a hint about splitting for wide farms, moving it beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns per-field agricultural boundary polygons from the Fields of the World global product, specifying output as GeoJSON FeatureCollection with detailed properties. It distinguishes itself from the sibling emem_recall_polygon by noting an alternative use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section provides clear conditions (user asks about farms/fields, OSM boundary too coarse). Includes practical guidance on splitting large farms and mentions alternative tool emem_recall_polygon for a different scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_find_similark-NN over the corpus by embeddingARead-onlyIdempotentInspect
k-NN over the corpus by cell embedding or inline vector.
When to use: Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. key is either a cell64 or inline:[x,y,...]. Default band is geotessera (128-D Tessera foundation embedding); pass band: "geotessera.multi_year" for the 1152-D 9-vintage (2017–2025) fusion.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| key | Yes | cell64 (look up that cell's vector) or 'inline:[x,y,...]' literal vector | |
| band | No | vector band to scan (default: 128-D Tessera foundation embedding). For mode=hamming/hamming_then_rerank you can pass either the cosine band (e.g. 'geotessera') or its binary sibling ('geotessera.bin128') — the responder picks the right one. | geotessera |
| mode | No | Scoring mode. cosine = fp32 over full vector (precise, ~256 B/cell scan). hamming = sign-bit popcount over the binary sibling band (~16 B/cell, ~1000× faster, ~65% recall@10). hamming_then_rerank = triage with Hamming on 4·k candidates then re-rank by cosine — matches cosine precision at ~16× less work. | cosine |
| as_of_tslot | No | Bi-temporal valid-time bound. Applied to candidate cells BEFORE cosine scoring — a cell with no fact whose tslot ≤ as_of_tslot under the scoring band is dropped from the candidate pool (undecidable→drop). When set, the Lance ANN fast-path is bypassed (the index has no signed_at column); brute-force k-NN runs instead so as_of is honoured truthfully. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). Also applied to candidates BEFORE cosine. Same Lance-bypass note as as_of_tslot. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), the description adds valuable behavioral details: mode performance trade-offs, bi-temporal filtering bypassing ANN, and default band. This significantly aids invocation.
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?
Concise yet comprehensive: usage guideline followed by parameter specifics. No redundant information, each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks description of output format (e.g., returned cell IDs or scores). Given no output schema, the description should clarify what the tool returns. Otherwise, strong.
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?
Description enriches schema with practical meaning: key format distinction, multi-year band option, mode performance numbers, and as_of bypass notes. This is critical for correct parameter setting.
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 the tool performs k-NN over the corpus using cell embedding or inline vector, which is specific and actionable. It distinguishes from siblings by focusing on embedding similarity.
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?
Provides explicit 'When to use' scenarios like 'find places like X', which helps the agent decide. However, it does not mention when not to use or explicitly compare to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_fleetSatellite / sensor lineage per bandARead-onlyIdempotentInspect
Per-band satellite-and-sensor fleet inventory — names the upstream platform (e.g. Sentinel-2A/B, MODIS Aqua/Terra, Landsat-8/9), revisit cadence, native resolution, and license for every materialized band. Lets an agent attribute imagery products correctly and pick the right band when revisit cadence matters.
When to use: Call when the user asks 'which satellite is this from', 'what's the revisit time', or needs source attribution for a derived answer. Pair with emem_materializers for the wire path and emem_sources for the connector-level metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, idempotentHint, and destructiveHint false. The description adds specific behavioral context about what the tool returns (platform, revisits, resolution, license) and that it helps attribute imagery, going beyond annotations without contradicting them.
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 efficiently structured with a concise first sentence for the main purpose, followed by a 'When to use' section. Every sentence adds value, no redundancy, and it is front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description sufficiently explains its purpose, content, and usage context. It also advises pairing with sibling tools for additional metadata, making it contextually 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 input schema has 0 parameters, and schema description coverage is 100%. The description does not need to add parameter details; baseline is 4, and the description effectively explains the tool's output without needing param info.
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 the tool provides a per-band satellite-and-sensor fleet inventory naming upstream platform, revisit cadence, native resolution, and license. It distinguishes itself from siblings by specifying its unique content and usage, and mentions pairing with emem_materializers and emem_sources.
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 'When to use' section explicitly lists example user queries ('which satellite is this from', 'what's the revisit time') and directs to pair with specific sibling tools for deeper context, providing clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_forestForest signals (Hansen GFC + ESA WorldCover)ARead-onlyIdempotentInspect
Recall forest signals at a place: Hansen Global Forest Change (tree cover 2000 baseline + year-of-loss) + ESA WorldCover 2021 land class.
When to use: Use when the user asks about deforestation, canopy cover, forest loss, or wants a forest-vs-not classification. Hansen gives year-of-loss for any cell with disturbance since 2001; WorldCover gives the current land class.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds context about what signals are retrieved (year-of-loss, land class) and that it provides both historical and current data. No contradictions.
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?
Three concise sentences with front-loaded purpose and clear usage guidelines. Every sentence adds value; no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters and no output schema, the description explains what data is returned (year-of-loss, land class) but does not describe the structure or format of the response. More detail on output would improve completeness.
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 100%, so all parameters have descriptions. The description does not add additional semantics beyond the schema; it explains the overall tool purpose but does not elaborate on individual parameter meanings.
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 explicitly states the verb 'recall', the resource 'forest signals', and specifies the exact data sources (Hansen GFC + ESA WorldCover). It clearly distinguishes this tool from siblings like emem_deforestation_alert and emem_sar_forest_disturbance.
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?
Provides explicit when-to-use guidance: 'Use when the user asks about deforestation, canopy cover, forest loss, or wants a forest-vs-not classification.' It also explains what each dataset contributes. However, it does not contrast with alternatives or mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_functionsActive function registryARead-onlyIdempotentInspect
Active function registry (derivation recipes).
When to use: Call when you need to know which derivative ops are available for emem_diff or how a band is computed from upstream sources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral information beyond what the annotations already provide. Annotations declare readOnlyHint: true, idempotentHint: true, destructiveHint: false. The description adds 'derivation recipes' context but no behavioral traits. The burden is on annotations, and there is no contradiction.
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 extraneous information. It front-loads the purpose and provides immediate usage guidance. Every sentence is valuable.
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 no parameters and no output schema, the description adequately explains what the tool does and when to use it. It could mention the return format (e.g., list of functions), but the purpose is clear enough for an agent to decide. The context of sibling tools further clarifies its role.
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 no parameters, and the schema coverage is 100% (empty). The description does not need to add parameter semantics, as there are none. Baseline 3 is appropriate.
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 the tool's purpose: 'Active function registry (derivation recipes)' and specifies that it tells 'which derivative ops are available for emem_diff or how a band is computed from upstream sources.' This is a specific verb (know, compute) and resource (derivation recipes), and it distinguishes itself from sibling tools like emem_diff and emem_bands.
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 explicitly provides a usage condition: 'Call when you need to know which derivative ops are available for emem_diff or how a band is computed from upstream sources.' This gives clear guidance on when to use the tool, though it does not explicitly state when not to use it or list alternatives. However, the context of sibling tools implies that this is a registry query, not a computation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_grid_infoActive grid encodingARead-onlyIdempotentInspect
Active grid encoding: cell64 ground resolution, lat/lng axis sizes, DGGS lineage.
When to use: Call once at session start (or when the user asks about cell resolution / 'how big is a cell'). Returns the actual ground resolution today (~9.54 m × 9.55 m square at the equator (lat 21 bits × lng 22 bits, matching Sentinel-1/Sentinel-2 native pixel pitch). The cell64 bit layout reserves a resolution-tag field for future hierarchical refinement targeting H3-equivalent res-13 (~3.4 m) cells in v0.1.) and the spec target. Useful before you reason about whether one cell is enough or whether you need emem_recall_polygon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds no contradiction. It provides extra context on returned data (resolution, axis sizes, lineage) and future plans, which is useful beyond 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 well-structured with purpose first, then usage, then technical details. It contains some extra details (e.g., future resolution aims) but remains fairly concise and 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?
Given no parameters and no output schema, the description fully explains what the tool returns, when to use it, and how it relates to other tools. It is complete for the tool's simplicity.
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?
No parameters exist, so schema coverage is 100%. The description does not need to clarify parameters; it focuses on output. Baseline 4 is appropriate.
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 it returns 'cell64 ground resolution, lat/lng axis sizes, DGGS lineage' and distinguishes from the sibling emem_recall_polygon by noting when each is appropriate.
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?
Explicitly says 'When to use: Call once at session start (or when the user asks about cell resolution / "how big is a cell")' and mentions alternative tool emem_recall_polygon for cases needing more cells.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_heat_solve2-D heat-equation forecast (urban LST evolution)ARead-onlyIdempotentInspect
Forward-step 2-D explicit finite-difference solver for the heat equation ∂u/∂t = α∇²u over a 3×3 cell stencil centred on cell. Reads modis.lst_day_8day (Land Surface Temperature) at the centre and 8 cell64 neighbours, integrates N hours ahead under a CFL-stable timestep, returns a signed forecast. Real PDE rollout — not a decay-scoring heuristic.
When to use: Use when the user wants a short-horizon LST forecast (urban heat island, surface-temperature evolution, heatwave onset modelling) at a specific cell. Default α=1e-6 m²/s matches urban surface diffusivity (Oke 2017); pass a smaller α for water bodies or higher for vegetated surfaces. The solver caps at one-week horizons because the 8-day MODIS composite stops being a representative initial condition past that. Each call materialises 9 MODIS facts (one per neighbour) on miss — first call ~5 s cold, ~30 ms warm. Receipt cites all 9 input fact CIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 string. Forecast LST evolution at this cell. | |
| hours_ahead | No | Forecast horizon in hours; capped at 168 (one week). | |
| diffusivity_m2_per_s | No | Thermal diffusivity α (m²/s). Default urban surface (Oke 2017 §2.3); use ~5e-7 for vegetation, ~1.4e-7 for water. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses reading MODIS LST at centre and neighbours, CFL-stable integration, return of signed forecast, materialization of 9 facts on miss, and citation of input CIDs. Annotations (readOnlyHint, idempotentHint, destructiveHint) are consistent and the description adds valuable behavioral context beyond them.
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 well-organized: functional definition, then mechanism, then when-to-use section, then parameter details. Each sentence serves a purpose, and the critical information is front-loaded. No unnecessary words.
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 no output schema, the description explains the process, inputs, and constraints well, but it lacks details on the exact return format (e.g., temperature value vs. delta) and units. It states 'returns a signed forecast' but does not specify units or interpretation. Slightly incomplete for full contextual completeness.
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?
While schema covers all three parameters at 100%, the description adds significant value: it explains the default diffusivity for urban surfaces (Oke 2017), suggests values for water and vegetation, and notes the hours_ahead cap of 168. This enhances parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a 'Forward-step 2-D explicit finite-difference solver for the heat equation' over a 3×3 stencil, with the title '2-D heat-equation forecast (urban LST evolution)'. It distinguishes from siblings by emphasizing it is a 'real PDE rollout — not a decay-scoring heuristic'.
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?
Explicitly states 'When to use' for short-horizon LST forecasts, provides guidance on changing diffusivity per surface type, notes the one-week horizon cap, and gives performance estimates (cold/warm start timings). This clearly defines when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_huntHunter mode — find event hotspots over a regionARead-onlyIdempotentInspect
Event-discovery sweep: pick an event keyword (algal_bloom, deforestation, flood_extent, wildfire, urban_heat_island, methane_plume, landslide, drought, soil_salinity, crop_stress, water_turbidity, oil_slick) plus a region (free-text name or polygon_bbox). The responder geocodes the region, fans out across up to 32 sampled cells, recalls each event's primary scalar input band, and returns the top 8 hotspots ranked by that scalar — each carrying its cell64, lat/lng, the recalled value, a fact_cid for citation, and a scene.png URL. Bypass for free-text input is emem_ask (the classifier in /v1/ask routes "find X in Y" questions to the same hunter path).
When to use: Call when the user asks an open-world discovery question ("find oil spills in the Persian Gulf", "where is deforestation happening in the Amazon", "show me algal blooms in Lake Erie", "hunt wildfires across California"). Surface 3–8 hotspots with their scene.png as image attachments and quote at least one fact_cid. For oil_slick the responder honestly reports not_yet_implemented and points at SAR-darkening + turbidity proxies — don't fabricate detections. The ranking uses the algorithm's primary scalar input only; for the full per-cell algorithm score, fetch the formula at /v1/algorithms/ and apply it client-side over the same recalled bands.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Event keyword. Maps to one registered detection algorithm: algal_bloom → algal_bloom_chlorophyll_ndci@1, deforestation → deforestation_alert_ndvi_drop@1, flood_extent → flood_extent_sar_threshold@1, wildfire → wildfire_burn_intensity_dnbr_finetune@1, urban_heat_island → urban_heat_island_lst_canopy@1, methane_plume → methane_plume_swir_anomaly@1, landslide → landslide_post_event_sar_dnn@1, drought → spi_meteorological_drought@1, soil_salinity → soil_salinity_index@1, crop_stress → crop_stress_score@1, water_turbidity → water_turbidity_red_band@1. `oil_slick` has no algorithm in the registry yet — the responder returns `status: not_yet_implemented` with pointers at the closest available SAR-darkening + turbidity proxies. | |
| region | No | Free-text region (e.g. "Persian Gulf", "Sahel", "Lake Erie", "California"). Resolved through the same geocoder as /v1/locate. REQUIRED unless `polygon_bbox` is provided. | |
| polygon_bbox | No | Explicit polygon bbox; alternative to `region`. Provide when you already have coordinates from a prior locate / recall_polygon call. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, idempotent, and non-destructive. The description adds detailed behavioral traits: fans out across up to 32 cells, returns top 8 hotspots with specific fields, ranking uses primary scalar only, and oil_slick returns a not_yet_implemented response. No contradictions.
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 well-structured with two paragraphs: first explaining the tool mechanism, second giving usage guidance. It is front-loaded with the purpose. However, it is slightly verbose in parts, but still concise considering the amount of 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?
Given the complexity of the tool (3 parameters, nested object, no output schema), the description covers all necessary aspects: purpose, parameters, behavioral details, output format, and alternative tools. It leaves no major gaps for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant meaning: explains event keyword mapping to algorithms, region geocoding, and polygon_bbox alternative. It also provides caveats like oil_slick not implemented, which is beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: event-discovery sweep over a region with a keyword and region input, returning top 8 hotspots with details. It distinguishes itself from siblings like emem_ask, which is mentioned as an alternative for free-text input.
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 explicitly provides when to use (open-world discovery questions with examples) and when not (oil_slick not implemented, pointing to proxies). It also mentions emem_ask as an alternative for free-text input, offering clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_intentIntent-routed plannerBRead-onlyIdempotentInspect
Submit a typed Intent; receive a plan or executed result.
When to use: Call when the user asks something like 'where is X' or 'is A like B' and you don't want to pick a primitive yourself — the planner maps Intent variants to the right tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | ||
| b | No | ||
| k | No | ||
| key | No | ||
| band | No | ||
| cell | No | ||
| type | Yes | ||
| claim | No | ||
| window | No | ||
| description | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, openWorldHint, idempotentHint, non-destructive. Description adds only that it returns a 'plan or executed result', which is minimal but consistent. No contradictions.
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?
Reasonably short, but critically fails to explain parameters. It front-loads purpose, but conciseness is not an excuse for omission of essential parameter details.
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 10 parameters, no output schema, and no parameter descriptions, the definition is severely incomplete. The agent cannot know how to fill parameters like 'claim' (object) or 'window' (array).
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 has 10 parameters with 0% description coverage. The description only mentions 'typed Intent' relating to the 'type' enum, leaving the other 9 parameters (a, b, k, key, band, cell, claim, window, description) completely unexplained. The description does not compensate for the lack of 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 clearly states the tool's purpose: submit an Intent and get a plan or result. It distinguishes itself from siblings by indicating it avoids manual primitive selection.
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?
Explicitly provides when-to-use guidance with concrete examples ('where is X', 'is A like B') and contrasts with picking primitives directly, making it easy for the agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_jepa_predictConstrained JEPA-pattern next-month NDVI predictorARead-onlyIdempotentInspect
Predict next-month NDVI at a cell using a constrained JEPA-pattern AR(2) seasonal predictor. Reads up to 24 past months of indices.ndvi, fits a closed-form predictor y_{t+1} = α·(lag-12 NDVI or recent mean) + β·(last + slope) + γ·recent_mean, returns the prediction clamped to NDVI's physical range. Coefficients (α=0.6, β=0.3, γ=0.1) are NOT learned — they're fixed from the agricultural-NDVI literature. v2 (future) will train an actual encoder + predictor on the geotessera embedding pool.
When to use: Use when the user wants a one-month-ahead NDVI forecast at a specific cell (crop-stress monitoring, growing-season tracking, vegetation-anomaly anticipation). Lookback defaults to 6 months; if fewer monthly tslots are attested at this cell, the predictor uses what's there and surfaces the count in lookback_months_used. Returns 422 if no NDVI history exists at the cell — chain to emem_backfill first to seed history. Receipt cites every input NDVI fact CID.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Band to forecast. v1 supports 'indices.ndvi' only. | indices.ndvi |
| cell | Yes | cell64 to forecast at. | |
| lookback_months | No | How many past months of history to read. | |
| forecast_horizon_months | No | Horizon in months ahead. v1 supports 1 only. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, etc.), the description reveals fixed coefficients, clamping to NDVI's physical range, lookback behavior, error response 422, and receipt citation. It adds substantial context without contradicting 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 front-loaded with the core purpose, then formula, then usage. It includes a future v2 note which is slightly extraneous but not excessive. Overall well-organized and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain return format. It mentions 'returns the prediction clamped to NDVI's physical range' and 'surfaces the count in lookback_months_used', but does not fully specify the output structure (e.g., single value or dict with metadata). Error handling is covered.
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 100%, but the description adds the formula (α,β,γ), the limit on forecast_horizon_months to 1, and that band supports only 'indices.ndvi' in v1. This algorithmic context goes beyond the schema's basic descriptions.
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 the tool predicts next-month NDVI at a cell using a constrained JEPA-pattern AR(2) seasonal predictor. It specifies the resource (NDVI at a cell), action (predict), and scope (v1 supports NDVI only, horizon=1 month). It distinguishes from siblings like emem_jepa_predict_v2 by noting v2 is future.
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 'When to use' section explicitly describes scenarios like crop-stress monitoring and growing-season tracking. It advises to chain to emem_backfill if no history exists. However, it does not mention when not to use this tool or compare to other NDVI-related tools like emem_ndvi.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_jepa_predict_v2Learned multi-band-scalar dynamics head (jepa_temporal_predictor@2)ARead-onlyIdempotentInspect
Predict the next-step value of 4 environmental scalars at a cell — indices.ndvi, modis.lst_day_8day, modis.lst_night_8day, cams.pm25 — using a small learned dynamics MLP. Reads up to K=6 most-recent attested lags per band, runs them through an ONNX dynamics head (~200k params, CPU-fast), and returns a per-band {value, confidence, n_real_lags, via}. The receipt's model block carries model_id, version, blake2b_hex (model_cid), training/validation provenance, a top-level skill_vs_persistence block, and honesty_warnings — flagging untrained_baseline when the artifact is the zero-init sentinel and NEGATIVE_SKILL when the learned model is worse than persistence on real held-out NDVI. When the model does not beat persistence, bands with a real lag are returned from that lag tagged via:persistence_fallback_negative_skill (bands with no real lag fall back to labelled climatology). Distinct from v1 (emem_jepa_predict) which returns a single NDVI scalar via closed-form coefficients.
When to use: Use when you want a short-horizon forecast of NDVI / land-surface temperature / PM2.5 at a cell grounded in its attested history. Returns 422 with a /v1/backfill hint when the cell lacks enough cached lags. Always read the receipt's model.honesty_warnings — untrained_baseline means the trivial 'predict last vintage' baseline (treat as no-op), and NEGATIVE_SKILL means the served values are the persistence fallback, not a learned improvement. Check each band's via field to see whether its value came from the learned model, persistence, or climatology.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 to forecast at, or a free-text place name (auto-resolved via /v1/locate). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by detailing return structure (per-band value/confidence/lags/via), model receipt contents (model_id, version, skill, honesty warnings), fallback modes (persistence, climatology), and pitfalls (untrained_baseline, NEGATIVE_SKILL). No contradiction with readOnlyHint.
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?
Well-structured with leading purpose, details, and usage section. Slightly verbose but each part earns its place. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers expected output, model metadata, skill interpretation, fallback conditions, and error handling. Without an output schema, the description compensates fully by explaining return fields and edge cases.
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 100% with a single parameter 'cell' already described in schema. Description repeats that cell is cell64 or place name but adds no new semantics beyond 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?
Specifically states it predicts next-step values of 4 environmental scalars (NDVI, LST day/night, PM2.5) using a learned MLP. Clearly distinguishes from v1 which returns a single NDVI scalar via closed-form coefficients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section instructs to use for short-horizon forecasts grounded in attested history. Mentions error handling (422 with backfill hint) and advises reading honesty warnings. Contrasts with v1 for single-scalar predictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_locateResolve place to cell64 + band inventoryARead-onlyIdempotentInspect
Resolves a place mention (free-text name, address, or lat/lng) to the protocol's cell64 identifier, and returns the topic-grouped inventory of bands and algorithms available at that location.
When to use: Use whenever the input refers to a real-world location and the next step needs the cell64 identifier or wants to know which bands are available before recalling. The response carries data_at_this_cell with three sub-fields: live_bands_by_topic (every band recallable here, grouped by topic such as flood_water_event_window, vegetation_condition, built_up_human_geography), algorithms_for_topic (composition recipes that fuse those bands into named scores), and declared_but_no_materializer_at_this_responder (cube slots reserved without a live connector). For the single-shot path that runs the full chain server-side and returns one packaged answer, use emem_ask instead.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Alias for `place` — accepted because OSM/Mapbox/Google Geocoding all use `q`. Provide either this or `place` (or `lat`+`lng`). | |
| lat | No | WGS-84 latitude in degrees, paired with `lng`. REQUIRED with `lng` unless `place`/`q` is provided. | |
| lng | No | WGS-84 longitude in degrees, paired with `lat`. REQUIRED with `lat` unless `place`/`q` is provided. | |
| place | No | Free-text place name (e.g. 'Mount Everest', 'Tokyo'). REQUIRED unless `lat`+`lng` is provided. Aliases also accepted: `q`, `query`, `name`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description reveals the response structure (data_at_this_cell with three sub-fields) and hints at the geocoding services used. No contradictions.
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 well-structured with clear sections (purpose, usage, response details). Though somewhat lengthy, every sentence adds value. Could be slightly more concise.
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 the complexity of the tool (4 parameters, no output schema), the description is complete: it explains the return values, differentiates from a key sibling, and covers usage context. Minor omission: no explanation of what cell64 is, but that's domain-specific.
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 100% with detailed descriptions for each parameter. The tool description adds no additional parameter semantics beyond what the schema provides, so a baseline of 3 is appropriate.
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 it resolves a place mention to a cell64 identifier and returns band inventory. It distinguishes itself from sibling emem_ask by noting when to use each.
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?
Explicitly says 'When to use' with the condition of needing cell64 or band inventory, and provides a clear alternative (emem_ask for single-shot) for when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_lstLand surface temperature (MODIS day + night)ARead-onlyIdempotentInspect
Recall MODIS land surface temperature day-8day + night-8day composites at a place. 1 km native, 8-day composite.
When to use: Use when the user asks about surface heat, urban heat island, thermal anomalies, or wants day/night LST. Returns both fluxes so the agent can derive day–night spread.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the data type (1 km resolution, 8-day composite) and return value (both fluxes). It does not contradict annotations and provides value beyond them.
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 extremely concise with two sentences plus a targeted usage note. Every sentence adds value, and the key information is 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?
Given the absence of an output schema, the description should explain what the response contains. It mentions returning 'both fluxes' but does not describe the response structure, units, or date ranges. For an 8-parameter tool, this is a gap.
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 100% with each parameter having a description. The description adds minimal extra meaning beyond the schema, merely mentioning 'day-8day + night-8day composites' which loosely relates to band parameters but lacks explicit linkage. Baseline 3 is appropriate.
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 the tool retrieves MODIS land surface temperature day and night 8-day composites at a location. This distinguishes it from siblings like emem_ndvi (NDVI) and emem_air (air temperature) by specifying 'land surface temperature' and 'day + night' composites.
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?
Provides explicit when-to-use guidance: surface heat, urban heat island, thermal anomalies, day/night LST. It also notes that it returns both fluxes for deriving day-night spread. However, it does not mention when NOT to use this tool or list alternative tools for related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_manifestsActive manifest CIDsARead-onlyIdempotentInspect
Active manifest CIDs (bands / functions / sources / schema).
When to use: Call to learn which exact registry versions a responder is serving. Cite these CIDs alongside any answer where reproducibility matters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows it's safe and idempotent. Description adds context about what the output represents and its use in reproducibility, but no additional behavioral details (e.g., caching, update frequency).
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, no fluff. First sentence defines the output, second gives usage context. Perfectly concise.
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 no-parameter tool, the description covers what it returns and why to use it. Lacks exact return format (e.g., mapping or list), but sufficient for agent to understand purpose.
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?
No parameters exist, so schema coverage is 100%. Description doesn't need to add parameter info; it appropriately focuses on output. Baseline 4 is justified.
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 clearly states the tool returns active manifest CIDs for bands, functions, sources, and schema. It distinguishes from sibling tools that operate on individual components, making the purpose specific and unambiguous.
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?
Explicitly tells when to use: to learn registry versions and cite for reproducibility. While it doesn't mention alternatives or when not to use, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_materializersAuto-fetch registry (per-band materializers)ARead-onlyIdempotentInspect
Auto-fetch registry: which bands the responder will materialize on a recall miss, the upstream provider, license, value shape, and history bounds.
When to use: Call once at session start (alongside emem_bands and emem_coverage_matrix) to learn which bands answer for ANY cell on Earth without seeding. Each entry declares upstream_scheme, upstream_endpoint, derivation_fn_key, value_kind (primary | absence | primary_or_absence), coverage (where the upstream has data), unit, tempo, confidence, and history_available_from / history_available_to (when the upstream supports historical fetch via emem_backfill). Use this when the user asks 'do you have flood data here', 'what providers feed this', or you need license attribution. The response also carries an agent_hint block explaining the trust model (responder signs, not upstream) and the absence-fact contract.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds behavioral context such as the agent_hint block explaining trust model and absence-fact contract, which goes beyond annotations. However, no additional side effects or constraints are 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 well-structured: first a definition, then usage guidance, then detailed fields. Every sentence provides essential information. It is concise yet comprehensive, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully enumerates return fields and includes the agent_hint block. It explains when and why to call the tool, making it self-contained and complete for a zero-parameter 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?
No parameters exist (input schema is empty, schema coverage 100%). Baseline for zero parameters is 4, but the description adds significant value by detailing what the tool returns and how to use it, which helps the agent understand the tool's function without needing parameters.
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 the tool's purpose: 'Auto-fetch registry: which bands the responder will materialize on a recall miss...' It lists the specific data fields returned, distinguishing its role from siblings like emem_bands and emem_coverage_matrix. The description is specific and actionable.
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?
Explicitly provides usage context: 'Call once at session start...' and gives example user queries that would trigger this tool ('do you have flood data here', 'what providers feed this', 'license attribution'). No when-not-to-use stated, but the context is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_bundleCompose a signed multi-fact memory bundleARead-onlyInspect
Compose N (cell, band, tslot?) triples into ONE signed envelope. Each triple runs through the standard auto-materialize recall path; the resulting fact_cids are bundled into a content-addressed envelope and the responder signs over the full receipt. The composed bundle_token is memb:<bundle_cid> — a single rebindable string that cites the whole set.
When to use: Call when the agent wants to cite multiple (place, band, vintage) facts as one handle. The bundle stays verifiable offline via /v1/verify_receipt (the receipt covers all cited fact_cids and cells). Use this instead of N separate emem_memory_token composers when the citation is conceptually one thing (e.g. "the EUDR-relevant baseline for these 8 plots at 2020-12-31").
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | Optional human-readable purpose string. Included in the bundle_cid preimage so the same triples + different purposes produce distinct CIDs. | |
| triples | Yes | One or more (cell, band, tslot?) triples to bundle. Each entry is recalled through the standard auto-materialize path; the bundle envelope cites every resulting fact_cid. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds behavioral details: each triple runs through auto-materialize recall path, fact_cids are bundled into a content-addressed envelope, and the responder signs. This provides context beyond annotations without contradiction.
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?
Concise and well-structured. Starts with the primary action, explains process, then provides usage guidance. Every sentence is informative with no redundancy.
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, the description explains the output (bundle token format) and offline verification. Covers main aspects: bundling process, token format, use case. Complete for a tool with 2 parameters and good sibling differentiation.
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 100%. Description adds meaning: explains that purpose affects the CID preimage, triples are recalled via standard path, and the bundle token format is `memb:<bundle_cid>`. This enriches understanding beyond schema descriptions.
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?
Clearly states 'Compose N (cell, band, tslot?) triples into ONE signed envelope'. Verb (compose) and resource (memory bundle) are explicit. Distinguishes from siblings by contrasting with N separate emem_memory_token composers and providing a concrete example.
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?
Includes a 'When to use' section that explicitly states when to call this tool and when to use an alternative (N separate composers). Also describes offline verifiability via /v1/verify_receipt, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_bundle_resolveDereference a memory_bundle tokenARead-onlyIdempotentInspect
Parse a memb:<bundle_cid> token and return the signed bundle envelope: every citation (cell, band, resolved_tslot, fact_cid, memory_token), the receipt, the responder pubkey, and the deduped flat cells[] / fact_cids[] arrays. Returns 404 with a typed code when the responder does not hold the bundle.
When to use: Call when an agent receives a memb: token from another agent (or earlier turn) and wants the underlying signed citation set. The response is byte-identical to what emem_memory_bundle returned at the original responder.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | A `memb:<bundle_cid>` rebindable handle to dereference. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, confirming safe, idempotent read. Description adds value by detailing the return structure and error condition (404 with typed code), which goes beyond annotation information.
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 sentences in the main paragraph plus a short usage paragraph. Front-loaded with return structure, no wasted words, highly 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?
Tool has one parameter, no output schema, but description fully explains what is returned and error behavior. Given low complexity, the description is complete and sufficient.
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 has 100% description coverage for the single parameter 'token', already defining it as a memb: handle. The description adds 'rebindable handle' context, but adds minimal additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it parses a memb: token and returns the signed bundle envelope with detailed components. It implicitly distinguishes from sibling tool emem_memory_bundle (which creates bundles), though not explicitly stating 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?
Explicitly says when to call: when an agent receives a memb: token from another agent and wants the underlying signed citation set. Provides context about response byte-identity to the original bundle, but does not specify when not to use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_contradictionsScan for multi-attester disagreementARead-onlyIdempotentInspect
Surface where the corpus DISAGREES with itself. When two or more independent sources signed different values for the same place + band + time, this returns that disagreement with a 0–1 severity score and citations to every disputed fact — instead of silently picking one value and hiding the conflict. The opposite of a confident single answer: it tells you when not to trust one.
When to use: Call this when trust matters before you rely on a number — 'is there disagreement about X', 'do the sources corroborate this', 'audit this claim', or 'find contradictory observations in region Y'. Use it to decide whether a fact is well-corroborated or contested. Narrow with cell_prefix (e.g. "defi.zb5") for a region and band for one family; min_severity filters out trivial differences. Severity is per band kind: scalar = spread over the band's range, vector = 1 − mean cosine, categorical = 1 − mode share. The receipt cites every disputed CID — follow up with emem_diff to quantify a pair, or (with the refinement loop on) read the emitted disagrees_with edge via emem_edges_recall.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Band key filter (e.g. `indices.ndvi`). Omit to include all bands. | |
| limit | No | Max contradictions to return. | |
| cell_prefix | No | Bytewise prefix on cell64 (e.g. `defi.zb5f9`). Omit to scan the whole corpus up to the scan cap. | |
| min_severity | No | Severity floor in [0, 1]. 0 = report every disagreement, 1 = only flagrant. Severity scoring is per band kind: scalar (max-min over band range), vector (1 - mean cosine), categorical (1 - mode share). | |
| window_unix_s | No | [lo, hi] inclusive Unix-seconds filter on attestations' signed_at — all disagreeing attestations must fall in the window. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description explains output details: severity score range 0–1, per-band kind calculation (scalar, vector, categorical), and inclusion of citations. No contradictions with 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 concise yet comprehensive: two paragraphs front-load the core concept and usage, with no redundant sentences. Every sentence adds value, and structure aids readability.
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 no output schema, the description fully explains the return format (severity score, citations), severity logic, and relationships to sibling tools. It covers all necessary context for an AI agent to decide when and how to use this 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?
With 100% schema coverage, the description adds significant value by explaining the semantic role of each parameter (e.g., cell_prefix for region narrowing, min_severity for filtering trivial differences) and detailing severity scoring per band kind, which goes beyond the schema's brief descriptions.
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 the tool's purpose: to surface multi-attester disagreements in the corpus. It uses specific verbs ('surface', 'returns') and distinguishes this from silently merging conflicts, effectively differentiating it from siblings like emem_compare or emem_diff.
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 explicit when-to-use scenarios ('when trust matters', 'audit this claim'), when-not-to-use ('the opposite of a confident single answer'), and how to narrow results (cell_prefix, band, min_severity). It also suggests follow-up tools (emem_diff, emem_edges_recall), offering complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_searchemem_memory_search — semantic search over /memories/* filesARead-onlyIdempotentInspect
Semantic search over /memories/* file contents using BGE-base-en-v1.5 (768-D, L2-normalised) backed by a Lance partition (memory_text_index_d768.lance). Matches paraphrases — "rainfall in March" finds "precipitation observed in spring" without an exact substring match. Returns ranked hits with similarity in [0,1], 200-char snippets around the best-matching chunk, and the signing receipt's path / file_cid / signed_at / attester_pubkey_b32 fields. Filters: kind, path_prefix, attester_pubkey_b32. Falls back to a brute-force scan (slower but correct) when the index is empty or EMEM_DISABLE_LANCE=1 is set; the via field of the response reports which path was taken.
When to use: Call instead of paging through memory_view whenever the agent knows roughly what it wants (a topic, a name, a paraphrase) but not the exact file path. Pair with memory_view for the full body once you've narrowed down the candidate — emem_memory_search returns a 200-char snippet, not the whole file. The polling indexer hydrates once per minute (configurable via EMEM_MEMORY_SEARCH_POLL_SECS), so a file created in the same turn may briefly miss the fast-path — the brute-force fallback still catches it.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of hits to return. | |
| q | Yes | Free-text query. Semantic — matches paraphrases not just substrings. | |
| kind | No | Optional filter: only files whose typing taxonomy entry matches (defaults to `resource` until Agent W's typing lands). | |
| path_prefix | No | Optional filter: only files whose path starts with this prefix (e.g. `/memories/journal/`). | |
| attester_pubkey_b32 | No | Optional filter: only files attested by this signer (base32-nopad-lowercase pubkey). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds behavioral details: embedding model, dimension, L2 normalization, Lance partition, fallback brute-force scan, and indexing delay. No contradiction.
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?
Description is well-structured and front-loaded with purpose. Slightly verbose but each sentence adds value. No wasted words.
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 complexity (semantic search, fallback, indexing delay, response fields), description covers all relevant aspects. No output schema, but return details are explained (snippets, receipt fields).
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 100%, so baseline is 3. Description adds valuable context: q is semantic, kind default value, path_prefix example, attester_pubkey_b32 format. Enhances understanding beyond 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 clearly states it performs semantic search over /memories/* files using BGE-base-en-v1.5, differentiating it from siblings like memory_view (paging) and other 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?
Explicitly recommends when to use (agent knows topic/paraphrase but not exact path) and when not (use memory_view for full body). Mentions alternatives and fallback behavior, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_tokenCompose a memory_token citation handleARead-onlyIdempotentInspect
Compose a memt:<cell64>:<fact_cid> (or memt:<cell64>:<state_cid>) citation handle. Validates both components are non-empty and do not contain the outer separator :.
When to use: Call when the agent wants a single rebindable string to cite a place + attested fact across messages, threads, or tools. The token is the recommended way for agents to pass earth-memory citations to other agents without re-fetching. Pair with emem_verify_receipt on the receiving end to verify the signed payload.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 — neither component may contain `:`. | |
| fact_cid | Yes | 26-char base32-nopad-lowercase content-id of the fact. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (`readOnlyHint: true`, `idempotentHint: true`, `destructiveHint: false`) already indicate a safe, idempotent composition operation. The description adds validation behavior (non-empty, no `:` separator), which is helpful but doesn't reveal significant new behavioral traits beyond the 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 concise with two short paragraphs. The first paragraph states the exact output format and validation. The second provides usage context. Every sentence is necessary and contributes to clarity, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (composing a token from two inputs), the description fully covers purpose, format, validation, and usage context. It also mentions the expected pairing with another tool. No output schema exists, but the return value is clearly specified. The description is sufficient for correct invocation.
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 100%, providing the baseline. The description adds value by explaining that both components are validated for non-emptiness and absence of the separator `:`, which goes beyond the schema's pattern description. This clarifies the tool's internal checks.
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 defines the tool's purpose: composing a `memt:` citation handle from a cell64 and a content ID. It explicitly states the format and validation rules. The tool is distinct from siblings like `emem_memory_token_resolve` and `emem_verify_receipt`.
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 includes an explicit 'When to use' section, detailing the scenario of creating a rebindable citation string for cross-message/reference sharing. It recommends pairing with `emem_verify_receipt`. While it doesn't list when not to use or alternative approaches, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_memory_token_resolveDereference a memory_token in one round-tripARead-onlyIdempotentInspect
Parse a memt:<cell64>:<fact_cid> citation handle and return the signed fact body the cid binds. Saves the agent from string-splitting the token and chaining GET /v1/facts/<cid> manually.
When to use: Call when an agent receives a memory_token from another agent (or out of a previous turn) and wants the underlying signed bytes. The response carries the parsed cell + fact_cid, the full fact body, and the stable fact_url an agent can hand to any other peer. 404 with a typed code if the responder doesn't hold the cid; try /v1/fetch with the cid then, or paste the token at a mirror.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | A `memt:<cell64>:<fact_cid>` citation handle to dereference. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent. Description adds context: returns parsed cell, fact_cid, fact body, and fact_url, plus 404 behavior with typed code. No mention of rate limits or side effects beyond what's implied.
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?
Four sentences, front-loaded with the main action, efficient. Every sentence adds value without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description covers return values (parsed cell, fact_cid, fact body, fact_url) and error handling (404 with typed code). Missing details like response format or pagination, but that seems unnecessary for this 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?
Schema coverage is 100% and parameter has description. Description goes further by explaining the token composition and the benefit over alternative approaches, adding semantic value.
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 it dereferences a memory_token to return the signed fact body. It specifies the exact token format and distinguishes from manual string-splitting and chaining GET calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section describes the scenario of receiving a memory_token from another agent or previous turn. Also provides alternative actions on 404 (try /v1/fetch or paste at mirror).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_ndviNDVI at a place (one-shot, polygon-aware)ARead-onlyIdempotentInspect
Recall Sentinel-2 NDVI (indices.ndvi, 10 m native) at a point or place. Composes locate → cell64 → recall in one call; auto-materializes on miss.
When to use: Use when the user names a place (or lat/lng) and just wants the NDVI number. Polygon-resolved places default to a 16-cell fan-out aggregated as mean/median. Set n_cells: 1 for point behaviour. For multi-band batches use emem_recall.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), the description discloses auto-materialization on cache miss, default 16-cell fan-out with mean/median aggregation, and the omitted per-cell arrays due to MCP size limits. This provides useful operational context.
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 concise: three sentences plus a 'When to use' section. It is front-loaded with the core action and quickly provides actionable guidance. Every sentence adds value without redundancy.
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 8 parameters and no output schema, the description adequately explains the tool's behavior, defaults, and alternatives. However, it does not explicitly describe the default response structure beyond mentioning omitted per-cell arrays. A small gap remains for agents expecting full output details.
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 100%, so baseline 3. The description adds value by explaining the composited pipeline ('locate → cell64 → recall'), polygon fan-out behavior, and the include parameter's purpose. This goes beyond the schema's basic descriptions.
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 the tool recalls NDVI at a point or place using Sentinel-2. It specifies the verb 'recall' and resource 'NDVI', and distinguishes itself as a one-shot, polygon-aware composite. It also contrasts with sibling emem_recall for multi-band batches.
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 explicitly states when to use: when the user names a place or lat/lng and wants NDVI number. It advises against using for multi-band batches, directing to emem_recall. It also explains polygon behavior and the n_cells parameter for point vs polygon mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_neighborhood_consistencyNeighbourhood consistency / spatial outlier (GeoTessera vs 8 neighbours)ARead-onlyIdempotentInspect
Score how much a cell looks like its surroundings: consistency = (1/8) Σ cosine(centre, neighbour_i) over the 8 immediate cell64 neighbours, plus outlier_score = 1 − consistency. High consistency = the cell blends in (Tobler's First Law); high outlier_score = it stands out — an edge, a fresh clearing, a built patch in farmland. CPU-only GeoTessera embeddings.
When to use: Call to flag a cell that is anomalous versus its local neighbourhood (change/edge detection, QA of a homogeneous expectation, scouting for the odd-one-out). Signed inconclusive when neither the centre nor any neighbour carried an embedding. For year-over-year change at one cell use emem_state_diff or emem_triple_consensus.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | Target cell64 or place name. Scored against its 8 immediate cell64 neighbours. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive. Description adds valuable context: CPU-only, GeoTessera embeddings, formula details, and inconclusive behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with formula and interpretation, followed by usage guidelines. Every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description fully covers purpose, behavior (inconclusive case), and alternatives. No gaps.
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 100% (single parameter with description). Description does not add new semantic detail beyond what the schema provides, but this is sufficient given simplicity.
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 defines the tool's purpose: scoring consistency and outlier score using cosine similarity with 8 neighbors. It explicitly distinguishes from sibling tools like emem_state_diff by stating it is for spatial outlier detection, not temporal change.
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?
Provides explicit when-to-use guidance (flag anomalous cell, change/edge detection) and when-not-to-use (year-over-year change, directing to emem_state_diff or emem_triple_consensus). Also specifies the inconclusive signed result condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_query_regionAggregate facts over a regionARead-onlyIdempotentInspect
Query facts over a region (single cell or list of cells), optionally aggregated per band.
When to use: Call when the user asks 'how does region X look', 'what's the average NDVI here', or wants a region-level summary. Use agg=mean|median|p90|vector_centroid to fold per-band values.
| Name | Required | Description | Default |
|---|---|---|---|
| agg | No | optional per-band aggregation | |
| bands | No | ||
| geometry | Yes | cell64 string, or 'cells:c1,c2,c3' | |
| as_of_tslot | No | Bi-temporal valid-time bound — applied per cell across the region. See emem_recall for semantics. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds that the tool queries facts and can aggregate, which aligns with annotations. No contradictions.
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 sentences plus a usage note. No wasted words, front-loaded with core function.
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 the tool has 5 parameters and no output schema, the description covers the essential behavior. However, it does not describe the return format or error handling, leaving minor gaps.
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 80%, so most parameters are already documented. The description adds value by explaining the `agg` options and geometry format, but does not substantially enhance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool queries facts over a region (single cell or list of cells) with optional per-band aggregation. Examples of user queries further clarify the purpose. This distinguishes it from sibling tools like emem_recall.
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 explicitly says 'Call when the user asks ...' and provides examples. It also gives guidance on using the `agg` parameter, but does not explicitly list when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_recallRecall facts at a cell (auto-materializes on miss)ARead-onlyIdempotentInspect
Recall facts about a cell — auto-materializes on miss for any band with a registered materializer.
When to use: Call after emem_locate (or with a known cell64). Returns every Primary fact stored at that (cell, band, tslot). IMPORTANT: if the cell has no fact yet for a requested band AND that band has has_materializer=true (per emem_coverage_matrix / emem_materializers), the responder fetches the upstream value, signs it under its identity, persists it, and returns it in the same response (~180 ms first call, ~10 ms cached thereafter). So for any wired band you can recall ANY cell on Earth without seeding — just pass bands: [<band>]. The response carries materialize_notes listing what was just fetched. Empty result with no notes means the band has no materializer at this responder.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | optional single band key — convenience alias for bands:[band]. Use when you want exactly one band (e.g. 'geotessera.2020', 'modis.ndvi_mean') and would otherwise have to wrap it in an array. Both `band` and `bands` are accepted; if both are given they are merged. | |
| cell | Yes | cell64 string, e.g. 'damO.zb000.xUti.zde78' | |
| bands | No | optional band keys to filter, e.g. ['indices.ndvi','geotessera'] | |
| scope | No | Optional multi-tenant scope {user_id, agent_id, run_id, org_id}. When at least one field is set, the recall is FILTERED to facts written under the same four-tuple (a recall scoped to {user_id:'u1'} sees only u1's facts, never another tenant's and never globally-written facts) AND the signed receipt binds the scope. Omit (or send {}) for the global, pre-v0.0.8 recall. | |
| tslot | No | optional time slot (band-tempo-relative integer offset from emem epoch) | |
| as_of_tslot | No | Bi-temporal valid-time bound. Returns the latest fact per (cell,band) whose tslot ≤ as_of_tslot — answers `what did this place look like AS OF date X`. Conflicts with an explicit `tslot` when as_of_tslot < tslot (rejected with code:`invalid_temporal_bound`). | |
| as_of_signed_at | No | Bi-temporal transaction-time bound. RFC 3339 string. Returns only facts whose `signed_at` ≤ as_of_signed_at — answers `what did emem KNOW as of system-date Y`. Malformed strings are rejected with code:`invalid_signed_at_format`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, non-destructive. The description adds valuable behavioral details: auto-materialization on miss, response carries materialize_notes, timing (~180ms first call, ~10ms cached), and that empty results without notes indicate no materializer. No contradictions.
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 somewhat long but every sentence adds value. It is structured with a lead sentence, a 'When to use' section, and important notes in bold. Could be slightly tighter, but the information density is high.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, but the description explains what is returned (every Primary fact, materialize_notes) and handles edge cases (empty result with no notes). It covers auto-materialization, timing, and scoping. Complete enough for a recall tool with good annotations.
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 100%, so the schema already describes all parameters. The description adds value by explaining the 'band' parameter as a convenience alias for 'bands' and their merging behavior, and the 'scope' parameter's filtering effect. This goes beyond the schema descriptions.
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 the verb 'Recall' and the resource 'facts about a cell'. It also distinguishes the key feature 'auto-materializes on miss', which sets it apart from siblings like emem_recall_many and emem_recall_polygon. The title reinforces the purpose.
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 explicitly advises calling after emem_locate or with a known cell64. It explains when auto-materialization occurs and references related tools (emem_coverage_matrix, emem_materializers) for checking materializer status. However, it does not directly compare with emem_recall_many or emem_recall_polygon for when to use each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_recall_manyBulk recall across up to 256 cellsARead-onlyIdempotentInspect
Recall facts across a list of up to 256 cell64 strings in one signed envelope. Server fans out per-cell recalls in parallel, then aggregates the response. Auto-materializes any cell with a missing fact whose band has a registered materializer — same contract as emem_recall.
When to use: Use after emem_find_similar (give it the neighbour cells), after emem_recall_polygon (when you want a deterministic cell list rather than a polygon), or whenever you have a precomputed set of cells (e.g. an admin-2 sample frame) and want one round-trip. Pass cells: [c1, c2, ...] plus the same bands shape as emem_recall. For more than 256 cells, batch the call.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Optional single band override (alias for bands:[band]). | |
| bands | No | Optional band filter — same shape as emem_recall.bands. | |
| cells | Yes | List of cell64 strings, max 256. Each cell is recalled in parallel and the responses are merged into a single signed envelope. | |
| tslot | No | Optional tslot offset. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, etc. Description adds parallel fan-out, aggregation, auto-materialization, and contract reference to emem_recall.
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 concise paragraphs: functionality then usage. Front-loaded key info, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and description relies on 'same contract as emem_recall' without explaining return structure. Lacks error handling or partial results details.
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?
100% schema coverage; description adds usage guidance: pass cells list, bands shape same as emem_recall, batch limit.
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 the tool recalls facts across up to 256 cells, distinguishes from siblings emem_recall (single cell) and emem_recall_polygon (polygon query).
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?
Explicitly defines when to use: after emem_find_similar, emem_recall_polygon, or for precomputed sets; includes batch recommendation for >256 cells.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_recall_polygonRecall facts across a place's polygonARead-onlyIdempotentInspect
Recall facts across every cell inside a place's polygon (single signed envelope). Closes the place-name-drift gap for wide features (parks, lakes, regions).
When to use: Call when the user names a wide feature (national park, river basin, country, large urban area) where one cell is too small. Pass place and the geocoder will fan out across the polygon — or pass polygon_bbox directly if you have coordinates. Returns merged_facts, by_cell, and a polygon_bbox.source indicator (nominatim_boundingbox = real polygon, centre_cell_bbox = fallback to one cell because the geocoder had no polygon). For farm queries the OSM polygon is the whole estate envelope; pass include: ["ftw_fields"] to additionally attach per-field agricultural-boundary polygons from Fields of The World (CC-BY-4.0) — or call the dedicated emem_field_boundaries for the pure-fetch shape.
| Name | Required | Description | Default |
|---|---|---|---|
| bands | No | Bands to recall at each fan-out cell. | |
| place | No | Free-text place name; resolved through the layered geocoder. REQUIRED unless `polygon_bbox` is provided. | |
| tslot | No | ||
| include | No | Optional supplements attached to the response. `ftw_fields` adds per-field agricultural-boundary polygons from Fields of The World (https://fieldsofthe.world, CC-BY-4.0) for the resolved polygon bbox — useful for farm queries where the OSM polygon is the estate envelope but the user wants the actual fields inside. Adds ~150-500 ms on first call per region (cached thereafter). | |
| max_cells | No | Cap on cells sampled from the polygon. | |
| as_of_tslot | No | Bi-temporal valid-time bound — forwarded to every per-cell recall in the fan-out. | |
| polygon_bbox | No | Explicit polygon bbox; alternative to `place` when caller already has coordinates. REQUIRED unless `place` is provided. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, not destructive. Description adds value by explaining return values (merged_facts, by_cell, polygon_bbox.source indicator), fallback behavior (centre_cell_bbox), and special farm query handling including performance implications for `ftw_fields`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of 4 sentences, each serving a purpose: purpose, use case, parameter/return details, and special case. No wasted words; front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains key return components and fallback behavior. It covers the main parameters and special include options. However, it could explicitly list all return fields or provide a more structured summary, but overall it's sufficient for an agent to understand 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?
Schema coverage is 88% (high), so baseline is 3. Description adds meaningful context for `include` (explains ftw_fields and performance), `place` (geocoder resolution), and `polygon_bbox` (alternative). Other parameters like `as_of_tslot` and `as_of_signed_at` are not elaborated further, but schema already describes them adequately.
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 what the tool does: 'Recall facts across every cell inside a place's polygon.' It explains the problem it solves (closing place-name-drift gap for wide features) and distinguishes from sibling tools like emem_recall and emem_field_boundaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: 'When to use: Call when the user names a wide feature... where one cell is too small.' It also provides alternatives: using `place` vs `polygon_bbox` and mentions dedicated `emem_field_boundaries` for pure-fetch shape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_region_similarityRegion similarity — cosine of two regions' mean GeoTessera embeddingsARead-onlyIdempotentInspect
Answer 'how alike are these two places?' Mean-pool the 128-D GeoTessera embedding across each region's cells to get a centroid, then return the cosine similarity in [-1,1] (+1 = identical landscape, 0 = unrelated). Each region is {place} | {polygon_bbox} | {cells}. CPU-fetched embeddings — no GPU sidecar needed. Surfaces how many cells in each region actually carried a vector (coverage).
When to use: Call to compare two areas at the level of overall land character (e.g. 'is this valley like that one?', 'find me somewhere that looks like X'). Degrades to a signed inconclusive (no number) when a region has no embedding-covered cells. For a single cell-to-cell vector cosine use emem_compare; for k-NN retrieval use emem_find_similar.
| Name | Required | Description | Default |
|---|---|---|---|
| region_a | Yes | First region: {place} | {polygon_bbox:{min_lat,max_lat,min_lng,max_lng}} | {cells:[cell64,...]}. | |
| region_b | Yes | Second region, same shape as region_a. | |
| max_cells | No | Per-region cell cap. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, etc.) are present, and the description adds key behavioral context: CPU-based computation (no GPU), coverage surfacing, and the edge case of returning a signed 'inconclusive' when cells lack embeddings. No contradictions.
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 concise at five sentences, with a clear front-loaded purpose and a structured 'When to use' paragraph. Every sentence adds value, no redundancy.
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 the presence of annotations, full schema coverage, and no output schema, the description sufficiently explains the algorithm, return type (cosine similarity or inconclusive), and edge cases. It also notes performance characteristics (CPU-fetched) and coverage reporting.
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 100% with detailed descriptions for each parameter. The optional description text adds meaning by explaining the centroid calculation and the nature of region objects (place, bbox, cells). This goes beyond what the schema alone provides, though the schema is already strong.
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 the tool answers 'how alike are these two places?' specifying the use of cosine similarity on mean GeoTessera embeddings with a range of [-1,1] and interpretations (+1 identical, 0 unrelated). It distinguishes from siblings emem_compare and emem_find_similar by mentioning their purposes.
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 'When to use' section provides explicit context for when to call (comparing overall land character) and when not (if no embedding-covered cells, returns inconclusive). It also names alternative tools: emem_compare for cell-to-cell vectors and emem_find_similar for k-NN retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_rice_ch4Rice-paddy methane (IPCC 2019 Tier 2, Eq 5.1)ARead-onlyIdempotentInspect
Estimate seasonal CH4 emissions from rice cultivation per IPCC 2019 Refinement Eq 5.1: integrate the daily emission factor over the cultivation period with water-regime scaling (SFp pre-season, SFo organic amendment) and an optional Yan-2005 Q10 temperature modifier. cultivation_period_days and the regional efc_kg_ch4_ha_day (Table 5.11) are REQUIRED — the endpoint refuses to guess a global default because the regional EFc drives the magnitude (~30% bias if wrong). An NDWI series (supplied or read from stored indices.ndwi) informs the flooding-regime context.
When to use: Call for paddy-rice GHG inventory / MRV work where the user needs kg CH4 per hectare for a cultivation season. The caller MUST pick the IPCC region's EFc row (Table 5.11) and the cultivation-period length; pass SFp/SFo when the water regime or organic amendment is known. Surface the seasonal emission, the EFc used, and the scaling factors so the inventory is auditable. For enteric/fertilizer pathways use the dedicated sustainability endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| sfo | No | Organic-amendment scaling factor SFo (Table 5.14); default 1.00 (no amendment). | |
| sfp | No | Pre-season water-regime scaling factor SFp (Table 5.13); default 0.68 (non-flooded pre-season > 180 d). | |
| cell | Yes | cell64 or place name. | |
| t_paddy_c | No | Mean paddy-water temperature (°C) for the Yan-2005 Q10 modifier; omit to disable the temperature correction (T_mod = 1). | |
| ndwi_series | No | Optional explicit NDWI series across the cultivation period. When omitted the endpoint reads the stored indices.ndwi trajectory. | |
| efc_kg_ch4_ha_day | Yes | Regional baseline EFc (kg CH4/ha/day) from IPCC 2019 Table 5.11. REQUIRED — pick the row for the cell's IPCC region (Asia.S 0.85, Asia.SE 1.22, Europe 1.56, …); the global 1.19 default would bias inventories ~30%. | |
| cultivation_period_days | Yes | Cultivation-period length in days (typically 110–150). REQUIRED — IPCC Eq 5.1 integrates the daily EF over this period; no defensible global default. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, establishing safety. The description adds significant behavioral context: it integrates daily emission factors, refuses to guess global defaults (noting ~30% bias if wrong), and explains optional NDWI series sourcing. No contradictions with 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 well-structured with a clear first sentence stating purpose, followed by requirement details and a usage paragraph. It is informative without being overly verbose, though the three paragraphs could be slightly tightened. Front-loaded and efficient overall.
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 explains inputs, required data, and the computational approach (integration, scaling factors, temperature modifier). However, it only vaguely mentions output: 'Surface the seasonal emission, the EFc used, and the scaling factors.' With no output schema, more precise output format or units would improve completeness.
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 100%, but the description greatly enriches parameter meaning. It provides typical values for cultivation_period_days (110–150), explains consequences of wrong EFc selection (~30% bias), gives defaults for SFp (0.68) and SFo (1.00), and clarifies when to use temperature modifier. This adds crucial context beyond schema descriptions.
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 the tool estimates seasonal CH4 emissions from rice cultivation using IPCC 2019 Eq 5.1, specifying the resource (rice-paddy methane) and action (estimate). Among sibling tools, this is unique in its domain, with no other tool directly performing rice methane estimation, so it is well-distinguished.
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 'When to use' paragraph explicitly advises calling this for paddy-rice GHG inventory/MRV work requiring kg CH4 per hectare, and directs users to dedicated endpoints for enteric/fertilizer pathways. It provides clear context on when to use and when not to use, with alternative pathways named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_sar_forest_disturbanceSentinel-1 SAR forest-disturbance scout (cloud-penetrating)ARead-onlyIdempotentInspect
Cloud- and night-independent Sentinel-1 C-band confirmation of forest disturbance. Intact forest scatters VV strongly + stably (canopy volume scattering); clearing collapses that term so VV backscatter DROPS ~3-5 dB. Samples VV at a baseline-year July-1 anchor and the latest scene, reports vv_drop_db = baseline − recent and a disturbed flag when the drop ≥ 3 dB (Reiche et al. 2018, RSE 204:147). Both VV reads are signed Primary facts; the response cites both fact_cids. Honest inconclusive when either S1 vintage is unavailable. Source: Microsoft Planetary Computer sentinel-1-rtc (anonymous SAS — no requester-pays, no API key).
When to use: Call to corroborate or scout forest clearing where cloud blocks the optical products — radar sees through cloud and at night, catching wet-season clearing the annual Hansen/JRC-TMF layers and a single cloudy Sentinel-2 pass miss (the gap RADD was meant to fill). This is an ADDITIVE scout signal, NOT a standalone legal verdict: a VV drop can also be transient (soil moisture, harvest, flood recession), so confirm with the optical consensus (emem_eudr_dds or emem_deforestation_alert) before crediting a decision.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. | |
| baseline_year | No | Baseline calendar year the VV drop is measured against (default 2020, the EUDR cut-off year). Baseline VV is sampled at a July-1 anchor of this year; the recent VV is the latest scene. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable context: explains the VV drop threshold (≥3 dB), baseline year sampling (July-1 anchor), 'inconclusive' state when vintage unavailable, and transient causes (soil moisture, harvest, flood recession). No contradiction with 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 well-structured: first sentence states purpose, then technical details, then usage guidelines. Every sentence adds value, no fluff. Concise yet comprehensive.
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 the tool's complexity (SAR radar with algorithm), the description covers purpose, mechanism, output fields (vv_drop_db, disturbed, fact_cids), limitations, parameter usage, and sibling differentiation. No output schema exists, but description compensates by stating output form. Complete for agent decision-making.
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 100% for both parameters, but the description adds meaning: 'cell' is a cell64 or place name; 'baseline_year' default is 2020 (EUDR cut-off) and explains how baseline VV is sampled (July-1 anchor) and recent VV is latest scene. This enriches the schema definitions.
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 the tool's purpose: 'Cloud- and night-independent Sentinel-1 C-band confirmation of forest disturbance.' It explains the mechanism (VV backscatter drop) and the output fields (vv_drop_db, disturbed flag). It distinguishes from optical siblings like emem_eudr_dds, making the purpose specific and unambiguous.
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 explicit when-to-use guidance: 'Call to corroborate or scout forest clearing where cloud blocks the optical products'. It warns against standalone use: 'NOT a standalone legal verdict' and recommends confirmation with optical consensus (emem_eudr_dds or emem_deforestation_alert). This clearly differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_schemaActive CDDL/JSON schema bundleARead-onlyIdempotentInspect
Active CDDL/JSON schema bundle by CID.
When to use: Rarely needed at chat time. Useful for offline verification of receipts / attestations against the exact schema version a responder used.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, not destructive. Description adds context about CID and offline verification but doesn't detail output format or behavior beyond 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?
Two succinct sentences, front-loaded with definition and usage. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description adequately explains the tool's purpose and usage. Could mention output format for completeness but not required.
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?
No parameters; description does not need to explain parameter semantics. Baseline of 4 is appropriate.
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 clearly identifies the tool as a schema bundle by CID, for offline verification of receipts. While it doesn't use an explicit verb like 'retrieve', the purpose is distinct from sibling 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?
Explicitly states 'Rarely needed at chat time' and specifies its use for offline verification, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_soilSoil profile (SoilGrids 0–30 cm: SOC, pH, texture)ARead-onlyIdempotentInspect
Recall SoilGrids 250 m profile at a place: SOC, pH, clay/sand/silt fractions, bulk density, nitrogen — all at 0–30 cm depth.
When to use: Use when the user asks about soil quality, agricultural suitability, or carbon stocks at a location. Six bands returned in one envelope.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, indicating a safe, idempotent read operation. The description adds behavioral context beyond annotations: it mentions that the default response omits per-cell arrays to stay under MCP's 25 KB cap, and that optional parameters (band, bands) can override default bands. No contradictions with 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 extremely concise: two sentences plus a 'When to use' clause. It is front-loaded with the core purpose and lists key soil properties efficiently. No redundant or superfluous language.
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 the tool's complexity (8 parameters, no output schema), the description provides a high-level overview of the output ('six bands returned in one envelope') and lists the data fields (SOC, pH, etc.). However, it lacks details on return format, units, or coordinate reference system, which would be helpful for agents to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 8 parameters with descriptions, achieving 100% schema description coverage. The description adds minimal extra meaning: it mentions that six bands are returned by default, which informs the use of the 'band'/'bands' parameters. This is adequate but not exceptional given the robust 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 explicitly states the tool's function: retrieving a SoilGrids 250 m profile at a location, listing specific properties (SOC, pH, clay/sand/silt fractions, bulk density, nitrogen) and depth (0–30 cm). This clearly distinguishes it from sibling tools like emem_elevation or emem_forest, which cover different environmental data.
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 a clear 'When to use' section: when the user asks about soil quality, agricultural suitability, or carbon stocks. It mentions the output format (six bands in one envelope). However, it does not explicitly state when not to use this tool or compare it to alternative soil-related tools, which would strengthen guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_sourcesActive source-connector registryARead-onlyIdempotentInspect
Active source-connector registry (URL templates, providers, licenses).
When to use: Call when you need to inspect which upstream EO providers are wired (Copernicus DEM, JRC GSW, ESA WorldCover, etc.) — useful for license attribution in agent answers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows it's a safe read-only operation. Description adds context about contents (URL templates, providers, licenses) but does not provide additional behavioral traits like latency or data freshness.
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 sentences; the first states the core purpose, the second gives usage guidance. No wasted words. Front-loaded with the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only registry with no parameters, the description covers the essential: what it is and when to use it. It could mention that the output is a list of sources with details, but the examples partially compensate. Annotations cover safety, so completeness is adequate.
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?
Tool has 0 parameters, so the parameter section is automatically scored 4. Description adds value by listing what information the registry contains, which helps the agent understand what will be returned.
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?
Clearly specifies that the tool is an 'Active source-connector registry' and lists concrete examples of providers (Copernicus DEM, JRC GSW, ESA WorldCover). This distinguishes it from all sibling tools, which focus on other domains like algorithms, data retrieval, or state management.
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?
States 'when to use' explicitly: to inspect which upstream EO providers are wired. Does not explicitly mention when not to use, but the narrow purpose makes misuse unlikely among 70+ sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_spiStandardized Precipitation Index (McKee 1993) drought metricARead-onlyIdempotentInspect
Compute the Standardized Precipitation Index (McKee et al. 1993) at a cell: fit a gamma distribution to the same-window precipitation-accumulation history, then standardize the current accumulation to a z-score and map it to a drought class (extreme/severe/moderate drought … normal … wet). Supply precip_history_mm + current_accumulation_mm directly, or omit them to read the stored weather.precipitation_mm trajectory and build the window accumulations server-side. window_days selects SPI-1 (30 d), SPI-3 (90 d, default), SPI-12 (360 d), etc.
When to use: Call when the user asks 'is this place in drought', 'how dry is it relative to normal', or wants a precipitation-anomaly z-score. The response is honest: when fewer than the WMO-recommended minimum samples exist it returns verdict=inconclusive with spi:null and a honest_note rather than fabricating a z-score from a handful of points. Quote the spi, spi_class, and n_samples. For raw precipitation use emem_weather; SPI is the standardized anomaly.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. | |
| window_days | No | Accumulation window (SPI-3 = 90 d default; SPI-1 = 30 d; SPI-12 = 360 d). | |
| precip_history_mm | No | Optional explicit same-window precipitation accumulations (mm). When omitted the endpoint reads the stored weather.precipitation_mm trajectory. | |
| current_accumulation_mm | No | Current-window accumulation (mm); required when precip_history_mm is supplied, else taken as the most-recent window from the stored series. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe read-only operation (readOnlyHint, destructiveHint false). Description adds honesty about inconclusive results with insufficient samples, explaining the honest_note behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear definition, parameter details, usage guidance, and behavioral notes. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description explains what the response includes (spi, spi_class, n_samples, honest note) and handles edge cases (insufficient data). Complete for a complex statistical 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?
Schema coverage is 100%, but description adds meaning: explains window_days mapping to SPI-1, SPI-3, etc., clarifies optionality of precip_history_mm with server-side fallback, and conditions for current_accumulation_mm.
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?
Clearly states it computes Standardized Precipitation Index (SPI) using gamma distribution and z-score mapping. Distinguishes from sibling emem_weather for raw precipitation.
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?
Explicitly specifies when to use (drought queries, anomaly z-score) and when not (raw precipitation → emem_weather). Provides clear context for agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_stateRead the place's state vector (single encoder OR full 1792-D cube)ARead-onlyIdempotentInspect
Get one dense numeric fingerprint that summarises everything known about a place — ready to feed into similarity search, a classifier, or clustering. Two views: encoder returns a single AI-model embedding (128-D Tessera, 1024-D Clay, 1024-D Prithvi); cube returns the full 1792-D vector concatenated across every band, with a per-band coverage manifest.
When to use: Call this when the user wants a machine-usable summary of a place rather than individual band readings — e.g. 'give me a feature vector for this location', 'how do I represent this place for ML', or before running similarity / linear-probe / clustering downstream. Also use it to get one rebindable handle (memory_token / state_cid) that cites the whole place. Default view=encoder is the cheap single-recall path; pass view=cube for the full attested view (its coverage[] lets you tell signed-zero from not-yet-materialised). Then hand the vector to emem_find_similar (k-NN), emem_compare (two-place cosine), or emem_verify_receipt (audit the signature).
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 OR free-text place name. | |
| view | No | Default `encoder` (single-band native vector). Pass `cube` for the full 1792-D voxel with coverage manifest, full-fidelity extras, and a humanised `scalars` map. | |
| tslot | No | Optional tslot bucket; omit for natural per-band vintages. | |
| encoder | No | For `view=encoder`: which vector band to read. Defaults to `geotessera`. | |
| families | No | `view=cube` only. Limit the cube to a subset of band families (e.g. ["foundation","vegetation"]). Slots from other families report `status:"filtered_out"`. | |
| as_of_tslot | No | Bi-temporal valid-time bound — forwarded to the underlying recall. Lets `/v1/state` answer `what did this place look like as of date X` for both encoder and cube views. | |
| materialize | No | `view=cube` only. Opt in to FULL auto-materialisation. Default false. The cube view auto-warms geotessera on a cold cell regardless of this flag, so view=cube is never less informative than view=encoder. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). | |
| include_reserved | No | `view=cube` only. Include declared-but-inert placeholder slots (`_reserved_128`, `reserved`) in the coverage manifest. Default false. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by detailing the difference between encoder and cube views, the auto-materialization behavior (cube auto-warms geotessera), and that cube is never less informative. No contradictions with annotations (readOnlyHint, idempotentHint, etc.).
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 well-structured with a clear opening, usage guidelines, and parameter details. It is relatively long but every sentence adds value. Minor redundancy could be trimmed, but overall effective.
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 9 parameters and full schema coverage, the description covers the key behaviors and parameter distinctions. It lacks an explicit output structure description, but the schema coverage and annotations compensate. Sibling context is provided.
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?
While schema coverage is 100%, the description provides additional context: specifies exact dimensions for encoder (128-D, 1024-D), the full 1792-D cube with coverage manifest, and explains the materialize flag. This adds meaningful detail beyond the schema descriptions.
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 the tool retrieves a dense numeric fingerprint of a place, with two views (encoder and cube). It explicitly mentions use cases like similarity search, classification, and clustering, distinguishing it from siblings like emem_find_similar and emem_compare.
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 explicit guidance on when to use the tool: when a machine-usable summary is needed, such as 'give me a feature vector' or before running similarity/clustering. It also explains the default view and when to use cube, and mentions related tools for downstream tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_state_diffBetween-tslot state vector delta (residual + cosine)ARead-onlyIdempotentInspect
Vector delta between the same cell at two tslots: returns the per-element residual, its L2 norm (scalar change-magnitude), the cosine between the two source vectors (orientation drift), and both source fact CIDs so the agent can quote both attestations as evidence.
When to use: Call when the user asks 'how much did X change between A and B' for a foundation embedding at one place. Pass tslot_a and tslot_b (must differ); default encoder=geotessera. For per-band scalar change (NDVI delta, elevation delta) use emem_diff instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| encoder | No | Default `geotessera`. | |
| tslot_a | Yes | First tslot. | |
| tslot_b | Yes | Second tslot; must differ from `tslot_a`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, idempotent, non-destructive behavior. The description adds that tslot_a and tslot_b must differ, default encoder is geotessera, and explains the specific outputs (per-element residual, L2 norm, cosine, source CIDs). No contradictions with 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?
Two sentences, front-loaded with key output information, no fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity and no output schema, the description adequately covers what the tool returns, when to use it, and how to distinguish from alternatives, making it self-contained.
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 75%; the description reinforces defaults and constraints already present in the schema (e.g., encoder default, tslot difference) but does not add new semantic meaning beyond what the schema provides.
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 'Vector delta between the same cell at two tslots' and lists specific outputs (residual, L2 norm, cosine, CIDs). It distinguishes itself from the sibling tool emem_diff, which is for per-band scalar changes.
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?
Explicitly states when to use ('when the user asks how much did X change between A and B for a foundation embedding at one place') and provides an alternative (use emem_diff for per-band scalar change).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_state_multiMulti-encoder state at one cell (foundation fan-out)ARead-onlyIdempotentInspect
Get the place's fingerprint from several AI models at once (geotessera, clay_v1, prithvi_eo2, galileo) in one call, returned as a per-model map. Each model is tried independently; any that can't produce a vector here show up under missing with a reason instead of failing the whole request.
When to use: Call this when the user wants a second (or third) opinion on what a place looks like — 'do the different models agree this is forest / urban / water?', 'which model has the freshest read here?', or when you want all the embeddings concatenated for a stronger downstream classifier. Use the single-model emem_state instead when one embedding is enough. Pass encoders: [...] to narrow the set.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| tslot | No | ||
| encoders | No | Optional explicit list; defaults to all wired foundation encoders (`geotessera`, `clay_v1`, `prithvi_eo2`, `galileo`). | |
| as_of_tslot | No | Bi-temporal valid-time bound — forwarded to every per-encoder recall. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds that each model is tried independently and failures appear under 'missing' with reasons, which is valuable behavioral context beyond what annotations convey. No contradiction.
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 concise: a main sentence, a behavioral note, and a targeted usage section. Front-loaded with the core purpose, each sentence adds value without redundancy.
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 5 parameters (1 required) and no output schema, the description covers essential behavior (partial failure, model listing, usage guidance) and mentions return format (per-model map, missing field). Slight gap in detailing output structure, but sufficient.
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 60%, and the description adds context for the 'encoders' parameter by mentioning narrowing. It also touches on the purpose of temporal parameters though not in detail. The description elevates understanding beyond the schema alone.
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 the verb 'get' and resource 'place's fingerprint from several AI models', listing the models and indicating a per-model map return. It distinguishes from the sibling tool 'emem_state' which is single-model.
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 explicitly provides a 'When to use' section detailing scenarios like comparing models or concatenating embeddings, and advises using the single-model tool 'emem_state' for a single embedding. It also suggests narrowing with 'encoders'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_temporal_routePlan a temporal recall recipe for a cellARead-onlyIdempotentInspect
Turn a time-shaped question into a ready-to-run recall plan: it figures out WHICH bands to pull at WHICH past time windows (e.g. 'the year before the flood', 'last growing season', 'two vintages to compare') so you don't have to compute tslot offsets by hand. Returns the band + lookback + a purpose tag for each step.
When to use: Call this first when the user's question is about CHANGE OVER TIME or a PAST EVENT and you're not sure which bands/dates to recall — 'was this flooded last year', 'what was the NDVI baseline before the fire', 'compare this place across vintages'. It hands you the recipe; then run those steps with emem_recall. Skip it when the user wants a single current reading. Pass cell plus an optional free-text intent hint. The plan is deterministic and the receipt cites which algorithm supplied each step.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 to plan a temporal recall over. | |
| bands | No | Optional band filter to scope the planner. | |
| limit | No | Optional cap on recipe entries returned. | |
| intent | No | Optional intent hint — drives recipe selection (e.g. 'flood_window', 'crop_season', 'change_year'). | |
| query_time | No | Optional anchor time (Unix epoch seconds). Defaults to now. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, and non-destructive hints. Description adds that the plan is deterministic, returns a recipe with band+lookback+purpose, and cites the algorithm used. This adds useful context beyond the 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?
Two-paragraph structure is efficient: first paragraph explains what it does, second paragraph usage guidance. No filler sentences; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no nested objects, the description covers purpose, usage, parameter semantics, return format (band+lookback+purpose), and deterministic behavior. It is fully sufficient for an agent to invoke 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 has 100% description coverage for all 5 parameters. Description reinforces the role of `intent` hint but does not add significant new meaning beyond the schema. Baseline 3 is appropriate.
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 clearly states it turns a time-shaped question into a recall plan, with specific examples and a verb+resource structure. It distinguishes itself from sibling `emem_recall` by noting the tool produces a recipe to be run later.
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?
Explicitly states when to use (change over time or past event) and when to skip (single current reading). Also provides a workflow: call this first then use `emem_recall`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_terrainTerrain triad — slope + ruggedness + topographic position from DEMARead-onlyIdempotentInspect
Compute three standard DEM terrain indices from one 3×3 Copernicus-DEM (copdem30m.elevation_mean) neighbourhood at a cell: Horn (1981) slope in degrees, Riley (1999) Terrain Ruggedness Index (TRI = sqrt(Σ(Z_centre−Z_i)²)), and Weiss (2001) Topographic Position Index (TPI = Z_centre − mean(neighbours); positive = ridge, negative = valley). The 8 neighbour cell64s are derived by perturbing the cell's lat/lng one cell pitch per axis; the east-west ground spacing is cos(lat)-corrected.
When to use: Call when the user asks how steep / how rugged / ridge-or-valley a place is, for siting (solar, construction, agriculture), erosion/landslide screening, or habitat-heterogeneity inputs. Slope and TRI need the full 8-neighbour ring; TPI degrades to ≥1 neighbour. Copernicus DEM is bathymetry-free, so ocean cells return a signed inconclusive rather than a fabricated slope — read each index's own verdict. For raw elevation use emem_elevation.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. The 8 neighbour cell64s are derived by perturbing the decoded lat/lng step_cells pitches per axis. | |
| step_cells | No | Stencil step in cell64 pitches (default 3 ≈ 28.7 m, matching the ~30 m Copernicus DEM native resolution). step_cells=1 samples below the DEM resolution and reads flat inside one source pixel; raise it to measure slope at a coarser scale. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant value beyond annotations: explains 3×3 neighbourhood derivation, latitude correction, ocean cell handling with inconclusive verdict, and per-index verdicts. Annotations already indicate readOnly, idempotent, non-destructive; description reinforces with concrete mechanics.
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 well-structured paragraphs: first defines indices and neighbor derivation, second provides usage scenarios and caveats. Every sentence earns its place; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description sufficiently explains return values (each index's verdict, including ocean handling). Covers neighbor requirements, resolution scaling, and application context. Complete for the tool's complexity.
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 100%, but description adds critical nuance: explains 'cell' accepts cell64 or place name, and 'step_cells' default aligns with DEM resolution and impacts scale. Without description, step_cells purpose would be unclear.
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 it computes three terrain indices (slope, TRI, TPI) from DEM neighborhoods, names the algorithms and authors, and distinguishes from raw elevation via explicit mention of emem_elevation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section covers user intents (steep, rugged, ridge/valley) and applications (siting, erosion screening). Specifies prerequisites for each index and warns about ocean cells. Points to alternative tool for raw elevation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_topicsTopic-grouped band + algorithm registryARead-onlyIdempotentInspect
Topic-grouped registry of every band and algorithm at this responder, plus visual surfaces and the declared_but_no_materializer_at_this_responder block (cube slots reserved without a live connector). Single source of truth shared with /v1/locate's data_at_this_cell block.
When to use: Call when the user's question lives in a topic but they haven't named a specific band — e.g. 'is this place flood-prone' (→ flood_history_long_term + flood_water_event_window) or 'how walkable is this' (→ urban_livability). Returns three blocks: live_bands_by_topic (every band you can recall right now), algorithms_for_topic (named recipes that compose those bands into derived answers — pair with emem_algorithms for the formulas), and declared_but_no_materializer_at_this_responder (honest gaps). Browse here BEFORE inventing your own synthesis formula.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint true and destructiveHint false. The description adds context about returning three blocks and being a single source of truth, which is valuable beyond 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 informative but somewhat lengthy. It starts with the core purpose and then adds details. Could be slightly trimmed but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description explains the three return blocks and their purpose. It covers what the tool returns and when to use it, making it 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 input schema has 0 parameters, so the description doesn't need to explain parameters. Baseline for zero parameters is 4.
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 it is a 'Topic-grouped registry of every band and algorithm'. It distinguishes from siblings by specifying it's for when the user hasn't named a specific band, and references other tools like emem_algorithms.
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?
Explicitly states 'When to use: Call when the user's question lives in a topic but they haven't named a specific band' with examples. It also advises to browse here before inventing formulas, providing clear guidance and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_trajectoryTime series for one (cell, band)ARead-onlyIdempotentInspect
Time series for one (cell, band) over an inclusive [start, end] tslot window. Returns only what's already attested — does NOT trigger materialization. For historical backfill use emem_backfill.
When to use: Call when the user asks 'how did X change over time' for a band that already has multiple historical tslots seeded. IMPORTANT differences from emem_recall: (1) trajectory does NOT auto-materialize past tslots — it returns only facts that have already been attested at this responder, so for fast-tempo bands like indices.ndwi you'll typically see ONE point at the latest tslot until an attester seeds history. (2) tslots are non-negative u64; there's no negative-offset 'last 2 years' shorthand. For LONG-TERM history questions ('flooded in last 2 years', 'forest loss since 2020') prefer either (a) a static-tempo summary band that one fact answers — surface_water.recurrence covers 1984-2021 in a single signed value, no trajectory needed — or (b) emem_backfill to materialize and sign the missing tslots in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| band | Yes | ||
| cell | Yes | ||
| window | Yes | [start_tslot, end_tslot] inclusive | |
| as_of_tslot | No | Bi-temporal valid-time bound. Skips points with tslot > as_of_tslot — effectively clips the window's upper edge. | |
| as_of_signed_at | No | Bi-temporal transaction-time bound (RFC 3339). Restricts the series to facts signed at or before this instant. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description discloses critical behaviors: does not trigger materialization, returns only already attested facts, tslots are non-negative u64 with no negative-offset shorthand, and explains bi-temporal parameters as_of_tslot and as_of_signed_at. This adds significant 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 well-structured and front-loaded with the core action. However, it is somewhat lengthy, with multiple sections (usage, differences, alternatives). Every sentence adds value, but it could be slightly more concise without losing clarity.
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 the tool's complexity (5 parameters, no output schema), the description covers return behavior (only attested facts), non-materialization, usage context, and tslot constraints. It does not explicitly describe the output format or pagination, but the focus on when-to-use and behavioral differences makes it sufficiently complete for correct invocation.
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 description explains the overall semantics of the window parameter as inclusive [start, end] and clarifies that tslots are non-negative u64. It also contextualizes the bi-temporal parameters. However, it does not explicitly describe the format of band and cell beyond the tool's purpose, though they are understandable from context. With 60% schema coverage, the description adds value but could be slightly more precise.
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 the purpose: return a time series for one (cell, band) over an inclusive tslot window. It explicitly notes that it does not trigger materialization and distinguishes from siblings like emem_backfill and emem_recall, making the tool's role very 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 provides explicit when-to-use guidance: call when the user asks 'how did X change over time' for a band with multiple historical tslots. It also contrasts with emem_recall (auto-materialization) and recommends alternatives for long-term history queries, offering clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_triple_consensusClay+Prithvi+Tessera change-consensus ensembleARead-onlyIdempotentInspect
Three-encoder change ensemble: compute the cosine change between the two most-recent DISTINCT vintages for each of the Clay, Prithvi, and Tessera embeddings at the cell, then vote each encoder's change against consensus_threshold (registry default 0.15). Returns each encoder's change magnitude, its vote, and the consensus verdict (how many of the three agree change happened). Degrades to a signed inconclusive when the GPU sidecar is unreachable or a cell lacks two distinct vintages for the encoders.
When to use: Call when the user wants a robust, model-agnostic 'did this place change' answer backed by three independent foundation encoders rather than one — e.g. cross-checking a single-encoder alert, or auditing change with consensus voting. Surface the per-encoder change + the vote count. When only one encoder has two vintages the verdict is honest about the thin evidence. For a single-encoder vector delta use emem_state_diff; for the NDVI+embedding proxy use emem_deforestation_alert.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | cell64 or place name. | |
| consensus_threshold | No | Override the registry consensus gate (default 0.15); clamped to (0,1). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, etc.), the description discloses degradation behavior: returns a signed 'inconclusive' when GPU sidecar is unreachable or a cell lacks two distinct vintages. This adds significant behavioral context. No contradiction with 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 well-structured with two paragraphs: the first explaining the algorithm and fallback, the second providing usage context. It is slightly verbose but every sentence adds value. The core functionality is 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?
Although the description covers algorithm, parameters, usage, and fallback, it lacks detailed return value structure (e.g., field names/types). Given no output schema, the description should provide more specifics on the response format to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description largely restates the schema definitions for both parameters. It adds no new meaning beyond the existing schema. Baseline of 3 is appropriate.
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 the tool computes a three-encoder change consensus using Clay, Prithvi, and Tessera embeddings. It specifies the action (compute change via cosine similarity and voting) and resource (cell). It distinguishes from siblings by naming alternative tools for single-encoder or NDVI-based change detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section explains the scenario for robust, model-agnostic change answers. It also provides clear when-not-to-use guidance by referencing two alternate tools (emem_state_diff and emem_deforestation_alert), enabling the agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_verifyVerify a structured claim against a cellARead-onlyIdempotentInspect
Verify a structured claim against a cell's facts. Returns verdict + evidence CIDs + signed receipt.
When to use: Call when the user asks a yes/no question about a cell ('is the NDVI > 0.7 here', 'has this been deforested'), or when downstream code wants citable evidence for a logical predicate.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| mode | No | fast | |
| claim | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, indicating a safe, read-only operation. The description adds value by describing the output format (verdict, evidence CIDs, signed receipt), which goes beyond the annotations. No contradictions.
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 concise: two short paragraphs, the first stating purpose and output, the second giving usage examples. Every sentence adds value, and the key information is 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?
Given the complexity of the input (nested claim object, 3 parameters, no output schema), the description is insufficiently complete. It does not explain critical fields like 'agg', 'tslot', 'window', or 'mode', making it hard for an agent to use correctly without external knowledge.
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 0% schema description coverage, the description must compensate for parameter details. It gives high-level examples ('NDVI > 0.7') but does not explain the structure of the 'claim' object (band, op, value, agg, tslot, window) or the meaning of 'mode' (fast vs resolve). An agent would need more guidance to construct valid inputs.
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 the tool's purpose: 'Verify a structured claim against a cell's facts.' It specifies the return (verdict + evidence CIDs + signed receipt) and gives concrete examples ('is the NDVI > 0.7 here'). The explicit usage guidance distinguishes it from siblings like emem_ask, which handles natural language queries.
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 clear when-to-use guidance: 'Call when the user asks a yes/no question about a cell...or when downstream code wants citable evidence.' It does not explicitly state when not to use or name alternative tools, but the positive examples are specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_verify_receiptServer-side ed25519 receipt verifierARead-onlyIdempotentInspect
Verify a signed receipt envelope server-side: recomputes the canonical preimage (request_id | served_at | primitive | cells, | fact_cids,), runs ed25519 over the embedded pubkey + signature, and returns {valid, reason, pubkey_b32}. Use when the in-browser /verify path is blocked (CDN offline, agent runtime has no crypto) or when you want a server-side audit of a third-party receipt.
When to use: Pass a receipt object exactly as returned by any read primitive (signature can be byte[] or sig_b32; pubkey can be byte[] or responder_pubkey_b32 — the verifier tolerates both shapes). Optionally override pubkey_b32 to assert verification against a specific signer. Returns 200 with valid: false when the signature fails — never 4xx for a structurally-well-formed bad signature.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | The signed receipt envelope (as returned by any read primitive). Must carry primitive/served_at/request_id/cells/fact_cids and either `signature` byte[] + `responder_pubkey` byte[] or their b32 string forms. | |
| pubkey_b32 | No | Optional explicit responder pubkey (base32). When omitted, uses the receipt's embedded pubkey/responder fields. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive. Description adds substantial behavioral details: recomputes preimage, runs ed25519, returns specific fields, tolerates both byte[] and b32 formats, and never returns 4xx for structurally valid bad signatures. No contradictions with 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 well-structured: starts with purpose, then usage guidance, then behavioral details. Every sentence contributes information. It is not overly verbose considering the complexity of the verification process, though it could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description completely covers input requirements, process (preimage computation, ed25519), output fields (valid, reason, pubkey_b32), and error handling (returns valid: false for bad signatures, never 4xx). The tolerance for different parameter shapes is also explained. This is highly complete for a verification 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?
Input schema has 100% coverage with descriptions for both parameters. The description adds meaning by explaining the receipt structure requirements (must carry primitive/served_at/request_id/cells/fact_cids and either signature+responder_pubkey or b32 equivalents) and that pubkey_b32 is an optional override. This provides context beyond the schema's generic descriptions.
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 explicitly states the tool verifies a signed receipt envelope server-side by recomputing the canonical preimage and running ed25519. It clearly identifies the verb (verify), the resource (receipt), and the specific algorithm (ed25519). This distinguishes it from many sibling tools that likely perform other data operations.
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?
Provides explicit use cases: when in-browser /verify path is blocked or for server-side audit. Also explains what happens on bad signature (200 with false, not 4xx). However, it does not compare to sibling tool 'emem_verify' or specify when not to use this tool, lacking full differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_waterSurface water (JRC GSW recurrence + S1 backscatter)ARead-onlyIdempotentInspect
Recall surface-water signals at a place: JRC Global Surface Water recurrence (1984–2021) + Sentinel-1 SAR backscatter (current). Pair detects standing water through clouds.
When to use: Use when the user asks about flooding, wetlands, surface-water dynamics, or wants a robust water-presence check. JRC alone gives historical baseline; Sentinel-1 gives current flood detection.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context, such as the ability to detect water through clouds and the distinction between historical and current data, without contradicting 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?
Two short paragraphs: first describes the tool's function, second provides usage context. No superfluous words, front-loaded with key information, and very 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?
Given the tool's complexity (two data sources, multiple parameters) and absence of an output schema, the description adequately explains the tool's purpose and usage context. It could mention the default response format, but the guidelines allow for some omission.
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?
All 8 parameters have schema descriptions (100% coverage), so the description adds little extra semantic value beyond stating 'lat/lng or place' and implying band/tslot use. It meets the baseline expectation for well-documented schemas.
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 specifies that the tool provides surface-water signals using JRC Global Surface Water recurrence and Sentinel-1 SAR backscatter, clearly identifying its unique purpose among siblings like emem_deforestation_alert or emem_elevation.
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 explicitly states when to use the tool (flooding, wetlands, surface-water dynamics) and explains the roles of JRC (historical baseline) and Sentinel-1 (current flood detection), offering clear guidance and differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_wave_solve1-D shallow-water swell propagation to coastARead-onlyIdempotentInspect
Forward-step 1-D explicit finite-difference solver for the shallow-water wave equation ∂²u/∂t² = c²∂²u/∂x² with c² = g·h, where depth h comes from gmrt.topobathy_mean along the seaward gradient. Models how an offshore swell of height H_s and period T propagates toward coastal_cell. Returns arrival height + time + depth + phase-speed profiles, all under a CFL-stable timestep.
When to use: Use when the user wants to predict swell arrival at a coast (storm-surge planning, shoreline-impact assessment, surf forecasting). The solver walks n_offshore_cells cells seaward from coastal_cell along the bathymetric gradient (default 8 cells = 80 m of profile at the active 10 m grid), samples GMRT depth at each, and integrates the wave equation forward until the wavefront reaches the coast plus one period. Receipt cites every depth fact CID along the profile. Returns 422 with a clear message if coastal_cell is land-locked.
| Name | Required | Description | Default |
|---|---|---|---|
| period_s | Yes | Wave period (s); typical wind-wave + swell envelope is 6-18 s. | |
| coastal_cell | Yes | cell64 of the coastal destination. | |
| n_offshore_cells | No | Cells to sample seaward when building the bathymetric profile. | |
| offshore_height_m | Yes | Offshore significant wave height H_s (m). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is read-only, idempotent, and non-destructive. The description adds valuable behavioral context: it uses a CFL-stable timestep, samples GMRT depth along a seaward gradient, and cites depth fact CIDs. It also clarifies that a 422 is returned for land-locked cells. This goes beyond annotations, hence a 4.
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 moderately long but well-structured with a clear purpose statement and a separate 'When to use' section. It front-loads the core function and avoids redundancy with schema. Every sentence provides useful information, though it could be slightly more concise in the technical details. Still highly effective.
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 4 parameters, no output schema, and good annotations, the description covers the return values (arrival height, time, depth, phase-speed profiles) and error handling (422 for land-locked). It explains the solver's process and references to depth CIDs. While the exact output structure isn't detailed, the summary is sufficient for an AI to understand behavior. A 4 reflects adequate completeness for this complexity.
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?
All input parameters have descriptions in the schema (100% coverage). The description enhances understanding by providing additional context: n_offshore_cells default of 8 corresponds to 80m at 10m grid, period_s typical range 6-18s, and offshore_height_m as Hs. It also explains how depth is derived from GMRT. This adds meaningful value beyond the schema, warranting a 4.
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 explicitly states the tool solves the shallow-water wave equation to model swell propagation to a coast, returning specific profiles. It uses specific verbs and resources, making the purpose highly clear. While it doesn't contrast with siblings like emem_heat_solve, the unique physics and output are distinct enough for an AI to understand its role.
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 includes a 'When to use' section that clearly states the tool is for predicting swell arrival at a coast, applicable to storm-surge planning, shoreline-impact assessment, and surf forecasting. It also notes the error case for land-locked cells. However, it does not provide explicit when-not-to-use guidance or mention alternative tools, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emem_weatherCurrent weather snapshot (temperature, cloud, precip, wind)ARead-onlyIdempotentInspect
Recall the standard met.no/CAMS weather bundle at a place: 2 m temperature + total cloud cover + precipitation + 10 m wind speed.
When to use: Use when the user names a place and asks 'what's the weather' or wants a now-cast snapshot. weather.* bands are now-only (no backfill); for climatology use terraclimate.*.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS-84 latitude. Paired with `lng`. Use when you already have coordinates. | |
| lng | No | WGS-84 longitude. Paired with `lat`. | |
| band | No | Optional single band override — replaces the endpoint's default band set with this one. | |
| bands | No | Optional CSV of band keys — replaces the endpoint's default band set. | |
| place | No | Free-text place name. Resolved through the standard /v1/locate cascade (wide-bbox → embedded → GeoNames → cache → Photon → Nominatim). Provide this OR `lat`+`lng`. | |
| tslot | No | Optional tslot offset (band-tempo-relative). | |
| include | No | Opt-in heavy response sections. Default response omits per-cell arrays to stay under MCP's 25 KB cap. Name specific sections to include them. | |
| n_cells | No | Polygon fan-out width. `n_cells: 1` = point at centroid. Defaults vary per endpoint (1 for /v1/at, 16 for single-band endpoints). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by clarifying the temporal scope (now-only, no backfill) and data source (met.no/CAMS). This provides useful context beyond 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 concise and front-loaded with purpose. Two sentences clearly state what the tool does, followed by a brief usage guideline. Every sentence serves a purpose without redundancy.
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 8 parameters, good annotations, and no output schema, the description covers the core purpose, usage, and temporal limitation. It lacks a description of the return format, but the reference to 'standard met.no/CAMS weather bundle' implies expected output. Minor gap but overall sufficient.
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 100%, so the schema already documents all parameters. The description does not add additional semantic meaning beyond what the schema provides. Baseline score of 3 is appropriate.
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 explicitly states the tool recalls a standard weather bundle (met.no/CAMS) and lists specific variables (temperature, cloud cover, precipitation, wind speed). It distinguishes itself as a now-cast snapshot, differentiating from climatology tools like terraclimate.
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?
Provides a dedicated 'When to use' section, guiding the agent to use this tool when the user asks 'what's the weather' or wants a now-cast snapshot. It also explicitly mentions that weather.* bands are now-only and suggests terraclimate for climatology.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_creatememory_create — write a memory file (overwrite if exists)ADestructiveInspect
Write a memory file at /memories/<path> with the supplied file_text. Overwrites if the file exists. Persists to sled, content-addresses the bytes (file_cid), and signs the write so the operation carries a verifiable receipt. Mirrors the create verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the LLM issues a create against its memory directory (initial scratchpad write, refresh of a notes file, etc.). The response carries the new file_cid and a signed receipt the agent can quote in audits.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional memory typing tag. Default `resource`. `episodic` = observation; `semantic` = learned fact; `procedural` = playbook; `resource` = generic scratchpad; `vault` = AEAD-sealed secret (stored encrypted; memory_view returns ciphertext-only unless a valid ed25519 capability over blake3("emem.vault_open|"+path+"|"+nonce) is supplied; never indexed by memory_search). | |
| path | Yes | `/memories/<file>` path. Overwrites if the file exists. Must stay under `/memories/`. | |
| attester | No | Optional ed25519 caller binding. Required for writes under `/memories/by_attester/<pubkey8>/...`. Shape: {pubkey_b32, sig_b32} where sig signs blake3("emem.memory_write|create|path|body_hash"). | |
| file_text | Yes | Full file contents. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds valuable context: persistence to sled, content-addressing for bytes (file_cid), signing for verifiable receipts, and the mirror of Anthropic's spec. This goes beyond what annotations alone convey.
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 compact paragraphs with no filler. The first paragraph states core functionality; the second gives usage context. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters, no output schema, and annotations, the description fully explains behavior (overwrite, signing, receipt), return values (file_cid, signed receipt), and the overall role in the memory tool set. Siblings like memory_delete and memory_view provide additional 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 input schema has 100% description coverage, so parameters are already documented. The description's text mentions file_text and the returned file_cid/signed receipt but does not add new parameter semantics beyond the schema. Baseline 3 is appropriate.
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 title and description clearly specify that the tool writes a memory file at a given path, with overwrite behavior. The verb 'write' and resource 'memory file' are explicit, and the description distinguishes it from siblings like memory_insert, memory_delete, etc., by focusing on creation/overwrite.
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 includes a dedicated 'When to use' section that directly ties the tool to LLM-issued 'create' operations. It implicitly separates from append operations (memory_insert) by noting overwrite behavior, but does not explicitly list alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deletememory_delete — remove a memory file or directoryADestructiveIdempotentInspect
Delete a memory file at /memories/<path>. When the path ends with /, every file beneath the directory is removed. Updates the path index but leaves prior content-addressed blobs in place (the audit history is append-only). Mirrors the delete verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the LLM issues a delete against a memory file or subdirectory it no longer needs. Existing receipts citing the old file_cid stay verifiable — the blob is content-addressed, only the path → file_cid index forgets.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | `/memories/<file>` or `/memories/<subdir>/` to delete. Directories drop every file beneath them. | |
| attester | No | Optional ed25519 caller binding. Required for `/memories/by_attester/<pubkey8>/...`. Body is empty for delete; sig signs blake3("emem.memory_write|delete|path|body_hash") where body_hash = blake3(""). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true and idempotentHint=true. The description adds valuable details: 'Updates the path index but leaves prior content-addressed blobs in place (the audit history is append-only).' No contradiction with 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 concise at about 6 sentences, with no filler. Key information (purpose, behavior, when to use) is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive, affects index, has optional attester) and no output schema, the description adequately covers behavior and side effects. Could optionally mention return value (e.g., empty response on success), but not essential.
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 100% and the schema already describes each parameter thoroughly (path with directory deletion behavior, attester with signing details). The description does not add new parameter information beyond what the schema provides, so the baseline score of 3 is appropriate.
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 explicitly states 'Delete a memory file at `/memories/<path>`' and differentiates directory behavior ('When the path ends with `/`, every file beneath the directory is removed'). It is distinct from siblings like 'memory_rename' and 'memory_str_replace'.
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?
Includes a 'When to use' section specifying that it should be called when the LLM issues a `delete` command. Provides context about verifiable receipts. Does not explicitly state when not to use, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_insertmemory_insert — insert at a given lineADestructiveInspect
Insert new_str after the given 1-indexed line in the named memory file. insert_line: 0 inserts at the top. Writes a new file_cid and signs the receipt. Mirrors the insert verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the LLM wants to append a new line to a memory file without rewriting it. For top-of-file inserts, pass insert_line: 0; for end-of-file, pass the current line count (the responder rejects out-of-range with a typed error).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional memory typing override. If omitted the existing kind is preserved. | |
| path | Yes | `/memories/<file>` path the insertion targets. | |
| new_str | Yes | Text to insert. A trailing newline is preserved if present; one is added otherwise. | |
| attester | No | Optional ed25519 caller binding. See memory_create for the preimage shape (verb=insert). | |
| insert_line | Yes | 1-indexed line number AFTER which to insert. 0 inserts at the top of the file. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects: writes new file_cid, signs receipt, and that out-of-range insert_line produces a typed error. The description adds context beyond the destructiveHint annotation, which already signals mutation.
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 concise paragraphs: first defines core action, second gives usage context. Every sentence adds value; no redundancy with schema or annotations.
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?
Covers insertion mechanics, parameter behavior, error handling, and references the external spec. Despite no output schema, the description provides sufficient information for correct invocation and understanding of outcomes.
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?
Adds meaningful detail beyond the input schema: trailing newline handling for new_str, 1-indexed line numbers with 0 for top, and that kind is an optional override preserving existing kind. This compensates for the schema's more generic descriptions.
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?
Clearly states it inserts new_str after a specific line in a memory file, with explicit 1-indexed and top-of-file behavior. Distinguishes itself as a targeted insert operation rather than a full rewrite or replacement.
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?
Provides explicit when-to-use: 'Call when the LLM wants to append a new line...without rewriting it.' Offers specific guidance for top-of-file and end-of-file. Could improve by naming sibling alternatives like memory_str_replace or memory_create for contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_list_by_kindmemory_list_by_kind — typed enumeration of memory filesARead-onlyIdempotentInspect
List memory files by their typed kind (episodic | semantic | procedural | resource). Optional path prefix narrows the scan; results are sorted by signed_at descending. The kind taxonomy follows the CoALA / LangMem / MIRIX agent-memory ontology: episodic = observations of events, semantic = durable learned facts, procedural = playbooks, resource = generic durable scratchpad (default for back-compat).
When to use: Call when an agent wants only one slice of its memory (e.g. surface every semantic fact it has learned about a topic) without scanning the full directory tree. Pair with memory_view for read-back of a specific entry.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Memory type to enumerate. | |
| limit | No | Maximum entries to return (default 256, cap 2048). Results are sorted signed_at desc. | |
| prefix | No | Optional path prefix filter, e.g. `/memories/by_attester/abcd1234/`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the `readOnlyHint` and `idempotentHint` annotations by noting results are sorted by `signed_at` descending and that the prefix narrows the scan. It does not contradict 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 front-loaded with the core action and then provides taxonomy detail and usage guidance. While slightly verbose, every sentence earns its place; minor trimming could improve conciseness.
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 no output schema, the description adequately explains the tool's purpose, parameters, and usage. It does not detail return format, but that is acceptable for a list operation with standard behavior.
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 100%, but the description adds value by explaining the kind taxonomy (CoALA / LangMem / MIRIX) and providing an example prefix path, which goes beyond the schema's enum and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List memory files by their typed `kind`' and provides a taxonomy of kinds (episodic, semantic, procedural, resource). It distinguishes itself from siblings like `memory_view` (read-back of a specific entry) and `memory_search` (cross-kind scanning).
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 explicitly says 'Call when an agent wants only one slice of its memory' and 'without scanning the full directory tree.' It also recommends pairing with `memory_view` for reading entries, providing clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_renamememory_rename — move a memory fileADestructiveInspect
Move (rename) a memory file from old_path to new_path. Both paths must stay under /memories/; new_path must not already exist. The file_cid is preserved (no re-sign) so the prior receipt still binds the bytes. Mirrors the rename verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the LLM wants to rename or move a memory file. Failure modes: source missing, destination already exists, path escapes /memories/.
| Name | Required | Description | Default |
|---|---|---|---|
| attester | No | Optional ed25519 caller binding (verb=rename). Required when either path is under `/memories/by_attester/<pubkey8>/...`. | |
| new_path | Yes | Destination `/memories/<file>` path. Fails when the destination exists. | |
| old_path | Yes | Existing `/memories/<file>` path. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: explains that file_cid is preserved and the prior receipt still binds the bytes. Also notes path constraints and failure modes. No contradiction with 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?
Two paragraphs front-loaded with action and constraints. Every sentence is necessary and informative. No wasted words.
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?
Covers behavior, constraints, error modes, and security considerations (path escape). For a 3-parameter tool with no output schema, the description is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds extra nuance about attester being optional and required in certain paths. Adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Move (rename) a memory file' and specifies the paths. It effectively distinguishes from sibling tools like memory_create and memory_delete by being a rename operation.
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?
Explicitly states 'When to use: Call when the LLM wants to rename or move a memory file.' Also covers failure modes, providing clear guidance on when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_str_replacememory_str_replace — exact-string replacement in a memory fileADestructiveInspect
Replace old_str with new_str in the named memory file. Fails (no partial write) when old_str is absent or matches more than once. Writes a new content-addressed file_cid and signs the receipt. Mirrors the str_replace verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the LLM issues a str_replace against its memory file — typical for small targeted edits. The strict single-match contract is the contract Claude expects: an LLM that sees a single-match diff knows the change applied where it intended.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional memory typing override. If omitted the existing kind is preserved. | |
| path | Yes | `/memories/<file>` path the replacement targets. | |
| new_str | Yes | Replacement substring. | |
| old_str | Yes | Exact substring to replace. The whole call fails (no partial write) when the old_str is absent or appears more than once. | |
| attester | No | Optional ed25519 caller binding. See memory_create for the preimage shape (verb=str_replace). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses failure on absent/multi-match, no partial write, writes new cid and signs receipt. Annotations already mark destructiveHint=true, but description adds critical integrity and idempotency details.
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 concise paragraphs: first states action and failure behavior, second gives usage guidance. No wasted words.
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?
Covers core behavior and usage, but lacks explicit return value description (no output schema). Mention of cid and receipt partially compensates.
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 100%, so baseline is 3. Description adds no new parameter info beyond what's in the schema, though it contextualizes the failure condition already present in old_str description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it replaces old_str with new_str in a memory file, with specific failure conditions. It distinguishes from siblings by referencing the exact str_replace verb and typical use case for small targeted edits.
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?
Explicitly says when to call ('when the LLM issues a str_replace against its memory file') and implies small edits. It doesn't list alternatives but the context is clear from the verb reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_viewmemory_view — read file or directory listingARead-onlyIdempotentInspect
Read the contents of a memory file at /memories/<path> or list a directory when the path ends with /. Optional view_range: [start, end] slices a 1-indexed inclusive line range out of the file. Mirrors the view verb in Anthropic's context-management-2025-06-27 memory tool spec.
When to use: Call when the model running with betas: ['context-management-2025-06-27'] issues a view against its memory directory. Use /memories/ (trailing slash) to enumerate files; /memories/notes.md to read one. Returns a 404 with typed code on missing path.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional kind filter when listing a directory. Restricts entries to one memory type (episodic|semantic|procedural|resource). | |
| path | Yes | `/memories/<file>` for a file, or `/memories/<subdir>/` for a directory listing. Must stay under `/memories/`. | |
| view_range | No | Optional [start_line, end_line] inclusive, 1-indexed. Lets the agent read part of a long file. | |
| vault_capability | No | Optional Vault capability: an ed25519 signature (base32-nopad-lc) over blake3("emem.vault_open|"+path+"|"+nonce_bytes), verifiable under the responder pubkey that sealed the entry. When the path is a Vault entry and this verifies, memory_view returns decrypted plaintext; otherwise it returns ciphertext-only. Ignored for non-vault paths. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral details like the `view_range` slicing behavior and the 404 error response on missing path, providing additional transparency beyond 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 short, well-structured, and front-loaded with the core purpose. Every sentence adds value. No unnecessary words.
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?
Covers the main use case, path constraints, optional parameters, and error response. No output schema, but return behavior is described. Could mention pagination for directory listings, but not necessary for completeness.
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 100%, but the description adds significant meaning: explains `path` with examples (trailing slash for directory), `view_range` as 1-indexed inclusive range, `kind` filter for listing, and `vault_capability` for decryption. This goes well beyond the schema descriptions.
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 'Read the contents of a memory file' or 'list a directory', with a specific resource path pattern. It distinguishes from sibling tools like memory_create or memory_delete which are write operations.
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 specifies when to call: 'when the model running with `betas: [...]` issues a `view` against its memory directory.' It gives concrete use cases but does not explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.