Elephant MCP Server
Provides an alternative embedding provider via AWS Bedrock for semantic code search when OpenAI is not configured.
Enables arbitrary SQL queries on property data through the queryProperties tool using embedded DuckDB.
Serves as the data storage layer, with property data published on IPFS and accessed via IPNS for geo tools and query-table.
Provides text embeddings for semantic code search in the getVerifiedScriptExamples tool.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Elephant MCP ServerList classes for the 'County' data group. use elephant mcp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Elephant MCP Server
Elephant MCP connects Claude-compatible clients to the Elephant data graph, exposing discoverable tools for listing data groups, classes, and individual property schemas. The server is published on npm as @elephant-xyz/mcp.
Embedding Provider: The
getVerifiedScriptExamplesand place co-location tools use text embeddings. Provider selection follows this priority:
OpenAI when
OPENAI_API_KEYis set - Usestext-embedding-3-smallwith 1024 dimensionsVercel AI Gateway when
AI_GATEWAY_API_KEYorVERCEL_OIDC_TOKENis available - Usesopenai/text-embedding-3-smallwith 1024 dimensionsAWS Bedrock otherwise - Uses
amazon.titan-embed-text-v2via the AWS credential chainVercel deployments can use their automatically supplied OIDC identity without storing an OpenAI or AWS secret. Local and AWS runtimes continue to fall back to Bedrock when neither OpenAI nor Gateway authentication is configured.
π Prompt Recommendations
For best results with Elephant MCP, always specify the Data Group you're working on in your prompts and add use elephant mcp at the end.
Example prompts:
"I'm working on the 'County' data group. Can you help me explore the available classes? use elephant mcp"
"What properties are available in the 'property' class? I'm working with the 'County' data group. use elephant mcp"This helps the AI understand which data context to use and ensures it leverages the Elephant MCP tools effectively.
Heads up: the one-click badges above install the npm build (
@elephant-xyz/mcp@latest), which is temporarily behind and does not include the query-table tools (queryProperties), and one-click cannot set the requiredPROPERTY_QUERY_TABLE_MAP. Until the next npm release, use the manual configuration below (GitHub build).
Related MCP server: Baby-SkyNet
Why Elephant?
Ready-to-use
npxlauncher compatible with Claude, Cursor, VS Code, Gemini CLI, and other MCP clients.Tools to enumerate Elephant data groups, related classes, and full JSON Schema fragments.
Structured MCP logging to stream diagnostics into every connected client.
Available Tools
listClassesByDataGroupβ Lists classes attached to an Elephant data group, including friendly names and descriptions.listPropertiesByClassNameβ Returns schema property keys for a class (excluding transport-only fields).getPropertySchemaβ Fetches the full JSON Schema for a specific property and class combination.getVerifiedScriptExamplesβ Returns a list of working examples of the code, that maps data to the Elephant schema.findPropertiesInAreaβ Returns properties whose centroid falls inside a user-supplied bounding box or polygon, sourced from the derived geo index.sumPropertyValueInAreaβ Sums the current AVM value of properties whose centroid falls inside a bounding box or polygon.queryPropertiesβ Runs a read-only SQLSELECT/WITHover a county's query-table (viewproperties) via embedded DuckDB, for arbitrary counts, filters, and aggregates over owner, address, zip, value, acreage, material, and more.getPropertyQuerySchemaβ Returns the query-table's columns and types for a county so callers know what they can query.getDatasetQueryCapabilitiesβ Returns the per-county allowlisted aggregate fields, operators, measures, hard budgets, null semantics, and query-table provenance for bounded dataset access.executeDatasetQueryPlanβ Executes a typedcount,share, oraverageplan over properties or permits. Callers cannot provide SQL, URLs, joins, expressions, or raw-row projections; values are parameter-bound and row/group/time budgets fail closed.queryPlacesβ Runs a structured, read-only query over a county's catalog-authorized Overture places parquet. Supports category/hierarchy/name/location/status/hosted-service/confidence filters, count mode, deterministic pages, and groupedtaxonomy_primaryaggregates; callers cannot submit SQL or URLs.analyzePlaceColocationβ Returns diagnostic bounded occupied-cell evidence for one exact Overture category pair, including conditioned spatial evidence, raw embedding distance, and immutable places-table provenance when the catalog IPNS path resolves. It explicitly returns no calibrated semantic percentile and remains non-publishable; discovery is the publishable Class H source unless separate auditable percentile evidence exists.discoverPlaceColocationCandidatesβ Accepts{ county }only, embeds every eligible category, and calibrates raw semantic distance against all eligible unordered category pairs before applying thedistance >= 0.35 AND inclusive percentile >= 0.80guard. It returns bounded top-32/top-5 evidence plus corpus, full-distribution, spatial-ledger, and immutable table-identity digests. Discovery fails closed for publication if immutable table provenance is unavailable or inconsistent. The percentile is relative semantic distanceβnot statistical improbability or a publish decision.getPlaceQuerySchemaβ Returns the real places columns, exactqueryPlacescontract, safety limits, release/attribution/licence-gate provenance, and honest null completeness for a county.getOraclePropertyβ Fetches the full consolidated record for one property (by parcel id, property id, or CID).listOraclePropertiesβ Paginated per-county property listing.listPublishedCountiesβ Enumerates Oracle's canonical catalog of published counties, stable county FIPS identities, public data URLs (including nullableplacesTableUrl), update timestamps, and catalog revision. Use this for county and places-availability discovery instead of a hard-coded list.getOracleDatasetInfoβ Per-county dataset summary (property count, export time, source) plus per-source coveragedatasets[](count, %, date range). When the configured query-table and coverage artifacts match the canonical county catalog, the exact appraisal row count comes from that small catalog-bound coverage snapshot; mismatches fail closed to the existing query-table count.getPropertyPermitsβ On-demand permit harvest for a parcel.
Overture places queries
Call getPlaceQuerySchema before the first query for a county, then call
queryPlaces with mode: "rows", "count", or
"groupByPrimaryCategory". The exact schema tool name is singular
getPlaceQuerySchema; the query tool is plural queryPlaces.
taxonomyPrimary supports exact or contains matching and is the correct field
for category counts. taxonomyHierarchyMember performs exact,
case-insensitive membership over the /-delimited hierarchy for roll-ups such
as restaurant. hostedService accepts include (MCP default), exclude, or
only; agents doing business/co-location counts should normally pass
exclude and disclose that choice. Rows include release, address, category,
status, confidence, coordinates, and hosted-service evidence. Public business
websites, phones, and emails remain outside the default row projection.
Every request resolves placesTableUrl from the canonical published-county
catalog. Callers cannot supply a parquet URL or SQL. Trusted HTTPS gateway
validation, bound values, a 60-second query timeout, a bounded connection
cache, deterministic sorting, and the shared 1,000-row cap protect the query
surface. Counties whose placesTableUrl is null return a clear unavailable
response. Overture has no authoritative total-business denominator, so
completionPercent remains null; the schema/query provenance points to the
published sibling index and notice carrying release and licence-gate evidence.
The co-location analyzer and discovery additionally issue a bounded HEAD for
the catalog's /ipns/<name>/<relative-path> table URL on trusted IPFS
gateways. Per the IPFS Path Gateway specification, X-Ipfs-Roots is ordered
from the resolved IPNS root through each logical path segment. The first CID is
therefore the immutable root used to construct
/ipfs/<rootCid>/<relative-path>; the last CID is recorded as the parquet leaf
only when X-Ipfs-Path matches and the header contains one root for every
segment. Analysis queries use the immutable URL when resolution succeeds.
When a complete header also exposes the parquet leaf CID, execution uses its
direct /ipfs/<contentCid> URL to avoid repeated directory traversal while the
root-based path remains the path-aware rerun locator.
Mutable IPNS alone never claims exact rerunnability. Analyzer evidence remains
diagnostic when resolution fails; discovery returns bounded evidence with
failure.failedClosed: true and cannot be used for publication.
Geo tools and data sources
These geo tools read two independent IPFS-published datasets, each resolved at
the doc level by its own IPNS name (no central hosted endpoint β every consumer
runs the server locally via npx, see below):
Lee property data β stable IPNS
oracle-open-data-lee.Derived geo/value index β separate dataset configured via
ORACLE_GEO_INDEX_IPNS(e.g.oracle-geo-index-lee), or a fixedORACLE_GEO_INDEX_CID. This index is independent from the property open-data vars and is whatfindPropertiesInArea/sumPropertyValueInAreaquery.
Supported MCP Clients
Cursor
Ensure Node.js 22.18+ is installed.
Cursor will open a configuration screen pre-filled with:
{ "command": "npx", "args": ["-y", "@elephant-xyz/mcp@latest"], "env": { // Option 1: Use OpenAI embeddings "OPENAI_API_KEY": "sk-your-openai-key", // Option 2: Use Vercel AI Gateway // "AI_GATEWAY_API_KEY": "your-gateway-key", // Option 3: Use AWS Bedrock (omit OpenAI/Gateway variables) // "AWS_REGION": "us-east-1" // optional, defaults to us-east-1 // Recommended: the per-county query-table (powers queryProperties AND all // property/geo/dataset tools). A served county needs ONLY this line: "PROPERTY_QUERY_TABLE_MAP": "{\"lee\":\"https://ipfs.filebase.io/ipns/k51qzi5uqu5djd4ohcf3qm87dhlt0e270xw8ejhkyia62edr76uj0u05hrf7m5\"}", // Optional override/addition: per-county hourly coverage snapshots. // Lee, Miami-Dade, Orange, Palm Beach, and Broward coverage URLs are built in. "DATASET_COVERAGE_MAP": "{\"lee\":\"https://ipfs.filebase.io/ipns/<coverage-ipns-name>\"}", // Optional override for Oracle's canonical published-county catalog: // "PUBLISHED_COUNTY_CATALOG_URL": "https://example.com/published-counties.json", // Optional legacy fallback (only for counties NOT in the query-table map): // "ORACLE_GEO_INDEX_IPNS": "k51qzi5uqu5djo3756w73x3swtt63g9y7igj7tvv1gs4skjk3haj3fuk7qosdi", }, }For OpenAI or AI Gateway, replace the corresponding placeholder with your actual key. Vercel production may instead use its automatically supplied OIDC identity. For AWS Bedrock, remove the OpenAI/Gateway variables and ensure your environment has valid AWS credentials (IAM role, environment variables, or AWS credentials file).
PROPERTY_QUERY_TABLE_MAP maps each county to its published query-table Parquet on IPFS. It powers queryProperties (arbitrary SQL) and is the primary source for getOracleProperty, listOracleProperties, getOracleDatasetInfo, and the geo tools β so a county listed there needs no ORACLE_* vars. getOracleDatasetInfo has built-in public coverage snapshots for Lee, Miami-Dade, Orange, Palm Beach, and Broward. Broward's snapshot is explicitly partial and combines appraisal, permit, corporate-registration, and BBB counts. DATASET_COVERAGE_MAP can override those URLs or add more counties by mapping each county to its small hourly dataset-coverage.json snapshot on Filebase/IPNS. Donphan uses this coverage to qualify answers, while Miranda's website can read the same public JSON URL directly. Do not configure this to an AWS S3 URL for public users. The ORACLE_OPEN_DATA_* / ORACLE_GEO_INDEX_* vars are optional fallback for counties not yet in the map.
Automated evidence consumers should pair each reviewed IPNS route with its
reviewed immutable query-table CID in
PROPERTY_QUERY_TABLE_CID_FALLBACK_MAP_ADDITIONS (and
PERMIT_QUERY_TABLE_CID_FALLBACK_MAP_ADDITIONS for permits). The typed dataset
query capability and aggregate result then report immutable CID provenance;
callers that require immutable evidence can reject mutable IPNS-only reads.
Rock Island additive configuration
Rock Island uses the existing county maps; it does not add or change shared
routing. Merge the following rock-island entry into each deployment's
existing JSON object (or into the matching *_MAP_ADDITIONS overlay). Preserve
every existing county entry and default county:
PROPERTY_QUERY_TABLE_MAP
{"rock-island":"https://ipfs.filebase.io/ipns/k51qzi5uqu5djbtswq6lb4p7xbf3nu8bzdzokdtcdld1r2vx6asn7lgfuk54wt"}
PERMIT_QUERY_TABLE_MAP
{"rock-island":"https://ipfs.filebase.io/ipns/k51qzi5uqu5di42nblo5nuk94aj7af393d9y5vhqxp5dtxikzso0wt14v3p0wa"}
DATASET_COVERAGE_MAP
{"rock-island":"https://elephant-mcp-two.vercel.app/coverage/rock-island.json"}These snippets show the Rock Island entries only, not replacement values for
the full maps. This configuration supports the existing property SQL, property
lookup/listing, permit SQL/schema, and dataset-info paths. Generic corporate SQL
and Rock Island getPermitCoverage are deferred and unsupported by this
publication.
Hillsborough additive configuration
Hillsborough (FL pilot) is additive the same way. Merge these entries into the
base maps or *_MAP_ADDITIONS overlays β do not replace other counties:
PROPERTY_QUERY_TABLE_MAP
{"hillsborough":"https://ipfs.filebase.io/ipns/k51qzi5uqu5diqz0l68gfi22qk0w8aqhsm7pcgje535uz8vhu8p37ynm2po0fh"}
ORACLE_OPEN_DATA_IPNS_MAP
{"hillsborough":"k51qzi5uqu5diznbms9qjkf8wrebeq7qwhc4jzy620k5bb44qqnibp7cl7nx1f"}
DATASET_COVERAGE_MAP
{"hillsborough":"https://ipfs.filebase.io/ipns/k51qzi5uqu5di5jghjwbpumnr2vt1crmaycqmtx673kw8pqp8dymecuig5x8jb"}*_MAP_ADDITIONS values are merged on top of the corresponding base map at
runtime (additions win on key collision). Use that overlay when the base
PROPERTY_QUERY_TABLE_MAP is a Vercel Secret you cannot rewrite in place.
Seminole additive configuration
Seminole (FL) is a full CAMA query-table publication: 181,218 appraisal rows
against the county total, with an honest coverage snapshot that reports 0 for
permits, corporate registrations, BBB, and Overture places. Do not set
ORACLE_OPEN_DATA_IPNS_MAP for Seminole (no canonical per-property JSON). Merge
only the seminole entries:
PROPERTY_QUERY_TABLE_MAP_ADDITIONS
{"seminole":"https://ipfs.filebase.io/ipns/k51qzi5uqu5di6kqptmkfaoq7yxc7z04spm1n0gbrc26toi2eah1b66cfrqfwp"}
DATASET_COVERAGE_MAP_ADDITIONS
{"seminole":"https://ipfs.filebase.io/ipns/k51qzi5uqu5dmawnn59hx0z87i36xk60os0vur3m05p8u2ial89cn2oay7o9oz"}Broward additive configuration
Broward is an explicitly partial, privacy-filtered publication: 526,068
appraisal property rows against an official 534,309-folio denominator, 496,064
frozen permit rows from 14 loaded source systems, 12,432 corporate
registrations, and 2,823 BBB profiles. The county-wide permit denominator is
unknown, and only 24 of 32 current primary jurisdiction routes are supported;
these counts must not be presented as complete county coverage. Merge only the
broward entries:
PROPERTY_QUERY_TABLE_MAP_ADDITIONS
{"broward":"https://ipfs.filebase.io/ipns/k51qzi5uqu5dibuhwyztmkjgvz94v3mkpgfreryxwb3d4neta5e7tsxebfi09s"}
PROPERTY_QUERY_TABLE_CID_FALLBACK_MAP_ADDITIONS
{"broward":"QmQhc18TqKTjBymQkfxdsbWNg6SxrDmQ3bfYBJdWWdU7cF"}
PERMIT_QUERY_TABLE_MAP_ADDITIONS
{"broward":"https://ipfs.filebase.io/ipns/k51qzi5uqu5dhns9u4o0lot4w4808yi4gdsyo5qx136lgmrplmgqdhah5qj7lg"}
PERMIT_QUERY_TABLE_CID_FALLBACK_MAP_ADDITIONS
{"broward":"QmcDAHJBt5LHiHAHdDwqCKM2BZqPwTJBrxW4Z5DJ6qEJd2"}
DATASET_COVERAGE_MAP_ADDITIONS
{"broward":"https://ipfs.filebase.io/ipns/k51qzi5uqu5dhx6yqczp6f9na3xa9g1iiizxtquer62x9wavh8gpbng524vrbp"}
DATASET_COVERAGE_CID_FALLBACK_MAP_ADDITIONS
{"broward":"QmTZndCJfNi29hxGzyLXpt9iYJedtmeM2DKFRa24LLA6dq"}The CID fallback maps do not replace the reviewed IPNS identity. They let DuckDB read the verified immutable bytes directly when a public gateway's HEAD and range caches disagree during IPNS propagation.
Note: the query-table tools (
queryProperties,getPropertyQuerySchema) are onmain. Until the next npm release, install the current build from GitHub β replace the args with["-y", "github:elephant-xyz/elephant-mcp"](first launch builds from source; give it a minute).
Save and toggle the Elephant connection inside Cursor's MCP panel.
If you are hacking on a local checkout, switch the command to
npm startand setcwdto your repository path.
Visual Studio Code
Install the Model Context Protocol extension.
Accept the pre-populated install flow above or add manually under Settings β MCP β Servers with:
OpenAI:
OPENAI_API_KEY=sk-your-openai-key npx -y @elephant-xyz/mcp@latestAWS Bedrock:
npx -y @elephant-xyz/mcp@latest(uses IAM credentials from environment)
Reload VS Code and enable the Elephant server in the MCP panel.
Claude Code
macOS/Linux with OpenAI:
claude mcp add elephant --env OPENAI_API_KEY=sk-your-openai-key -- npx -y @elephant-xyz/mcp@latestmacOS/Linux with AWS Bedrock (uses IAM credentials):
claude mcp add elephant -- npx -y @elephant-xyz/mcp@latestRestart Claude Code after adding the server so the tools appear in the @tools palette.
OpenAI Codex
CLI setup
With OpenAI:
codex mcp add elephant --env OPENAI_API_KEY=sk-your-openai-key -- npx -y @elephant-xyz/mcp@latestWith AWS Bedrock:
codex mcp add elephant -- npx -y @elephant-xyz/mcp@latestYou can explore additional options with
codex mcp --help. Inside the Codex TUI, run/mcpto view currently connected servers.config.toml setup Edit
~/.codex/config.toml(or open MCP settings β Open config.toml from the IDE extension) and add:For OpenAI:
[mcp.elephant] command = "npx" args = ["-y", "@elephant-xyz/mcp@latest"] env = { OPENAI_API_KEY = "sk-your-openai-key" }For AWS Bedrock:
[mcp.elephant] command = "npx" args = ["-y", "@elephant-xyz/mcp@latest"] # Uses IAM credentials from environment; optionally set AWS_REGIONSave the file and restart Codex to load the new server.
Gemini CLI
Create (or edit) .gemini/settings.json in your project and add:
With OpenAI:
{
"mcpServers": {
"elephant": {
"command": "npx",
"args": ["-y", "@elephant-xyz/mcp@latest"],
"env": {
"OPENAI_API_KEY": "sk-your-openai-key",
},
},
},
}With AWS Bedrock:
{
"mcpServers": {
"elephant": {
"command": "npx",
"args": ["-y", "@elephant-xyz/mcp@latest"],
// Uses IAM credentials from environment
},
},
}Restart Gemini CLI or run gemini tools sync to pick up the new server.
Configuration
The stdio transport means no port or server identity flags are required. Environment variables handled by src/config.ts:
Variable | Description | Default |
| OpenAI API key for embeddings. When set, OpenAI is used; otherwise falls back to AWS Bedrock. | (optional) |
| AWS region for Bedrock API calls. |
|
| Pino log level ( |
|
| Optional bearer token protecting the | (optional) |
| Recommended. JSON object mapping county β query-table Parquet location (an IPNS gateway URL or a local path), e.g. | (optional) |
| Strict county β reviewed CIDv0 map for DuckDB property reads. The corresponding property map route must remain IPNS so publication identity and scope checks stay stable. | (optional) |
| Single-county query-table location (fallback when the map is unset). | (optional) |
| County the single | (optional) |
| JSON object mapping county β permit query-table Parquet location. Merge new county entries into the existing object so configured counties keep their current routes. | (optional) |
| Strict county β reviewed CIDv0 map for DuckDB permit reads. The corresponding permit map route must remain IPNS. | (optional) |
| Optional JSON object mapping county β published | (optional) |
| Strict county β reviewed CIDv0 map for coverage reads. The corresponding coverage map route must remain IPNS so publication identity and scope checks stay stable. | (optional) |
| Single-county coverage snapshot location (fallback when the map is unset). | (optional) |
| County the single | (optional) |
| Canonical Oracle-published county catalog used by | Oracle repository catalog |
| JSON object mapping county β IPNS for multi-county deployments, e.g. | (optional) |
| County used when a request omits | (optional) |
| Legacy single-county IPNS of the open-data manifest/index. Used when | (optional) |
| Fixed CID fallback for the default county when IPNS resolution yields nothing. | (optional) |
| IPNS name of the derived geo/value index (e.g. | (optional) |
| JSON object mapping county β IPNS for the geo/value index (same shape as | (optional) |
| Default county for the geo/value index when no county is requested. | (optional) |
| Fixed CID of the derived geo/value index; used when | (optional) |
AWS Bedrock Authentication
When using AWS Bedrock (no OPENAI_API_KEY set), the server authenticates using the standard AWS credential chain:
Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)Shared credentials file (
~/.aws/credentials)ECS/Lambda container credentials (
AWS_CONTAINER_CREDENTIALS_*)IAM instance role (when running on EC2/ECS/Lambda)
Ensure your IAM role or user has the bedrock:InvokeModel permission and access to the amazon.titan-embed-text-v2:0 embedding model in the configured AWS_REGION. In some regions, you must explicitly request access to this model in the AWS Bedrock Console before it can be invoked.
Important: At least one embedding provider must be configured. If neither OPENAI_API_KEY nor AWS credentials are available, the getVerifiedScriptExamples tool will return an error prompting you to configure credentials.
Credential Verification
At startup, the server verifies embedding provider credentials:
For OpenAI: Checks that
OPENAI_API_KEYis setFor AWS Bedrock: Resolves credentials through the full AWS credential provider chain and logs the detected source
The verification result is logged and included in the MCP startup message for debugging.
Database Compatibility
The embedding database is automatically rebuilt when switching between embedding models with different vector dimensions (e.g., switching from a 1536-dimension model to a 1024-dimension model). This ensures the getVerifiedScriptExamples tool works correctly after model changes. The server will re-index all verified scripts after a rebuild.
Zod compatibility note: this server and its dependencies require zod v3. Installs will fail if a v4 copy is hoisted into node_modules; the postinstall script enforces the v3 constraint to avoid runtime errors such as keyValidator._parse is not a function.
Need to Contribute?
Development setup, testing, and release workflows live in CONTRIBUTING.md.
Support
Open an issue with your Node.js version, client details, and any relevant log output if you run into trouble. We're happy to help you get connected.
Available Tools
22 toolsanalyzePlaceColocationAnalyze Overture place co-locationA
Return bounded diagnostic occupied-grid-cell evidence for one exact unordered taxonomy_primary pair in one published county. Spatial evidence is deterministic and uses a fixed-global-origin equirectangular grid plus 199 geography-and-density-conditioned permutations. Semantic evidence uses raw cosine distance over canonical category/hierarchy gloss embeddings, but this single-pair tool does not fabricate the full eligible-universe calibrated percentile. discoverPlaceColocationCandidates is the publishable Class H source unless separate auditable percentile evidence exists. Embedding failure preserves spatial evidence with semanticDistance.value=null. This tool never makes a publish decision.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it explains deterministic spatial evidence, the equirectangular grid and 199 permutations, raw cosine semantic evidence, the lack of a calibrated percentile, and the embedding-failure edge case preserving spatial evidence with semanticDistance.value=null. It also states clearly that the tool never makes a publish decision.
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?
Every sentence carries distinct information: purpose, methodology, sibling distinction, edge-case behavior, and safety boundary. The description is dense but not bloated, and the core purpose 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?
For a zero-parameter diagnostic tool with no annotations and no output schema, the description covers what is returned, how it is computed, the key edge case, the relationship to the publishable sibling, and the tool's non-decision authority. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter ambiguity is not an issue and the baseline is 4. The description reinforces that the tool is intentionally narrow (one pair, one county) rather than a general configurable API.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Return'), a specific resource ('bounded diagnostic occupied-grid-cell evidence'), and an exact scope ('one exact unordered taxonomy_primary pair in one published county'). It also distinguishes itself from the sibling discoverPlaceColocationCandidates by explicitly stating it is not the publishable source.
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 clearly implies when this tool is appropriate: for diagnostic, bounded, non-publishable evidence. It explicitly names discoverPlaceColocationCandidates as the publishable Class H source, which provides a strong routing signal, though it stops short of an explicit 'use this when, use that when' formulation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discoverPlaceColocationCandidatesDiscover Overture place co-location candidatesA
Discover a bounded county-wide family of Overture taxonomy_primary co-location candidates using a fixed 800m non-hosted occupied-cell universe and release-derived stratified discovery/validation split. Every eligible category is embedded; all eligible unordered pairs define an outcome-independent semantic reference distribution. Spatial pairs require raw cosine distance >=0.35 and inclusive empirical percentile >=0.80 before the top-32 analytic rank cap, then receive exact stratified hypergeometric validation and Holm adjustment. The county only response includes bounded evidence and canonical corpus/distribution/spatial-ledger digests. Percentile means relative semantic distance, not statistical improbability or a publish decision.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | One published county key/name, e.g. 'lee' or 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden, and it does so thoroughly. It exposes the fixed 800m universe, the stratified split, the cosine and percentile thresholds, the top-32 cap, the hypergeometric validation, Holm adjustment, and the important caveat that percentile is relative semantic distance and not a publish decision.
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 dense and technical, but every sentence contributes specific thresholds, constraints, or caveats. It front-loads the core purpose and then builds into methodology and output, with minimal repetition. It could be slightly streamlined, but the length is justified by the complexity.
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 annotations and no output schema, the description provides substantial context: it explains the discovery logic, filtering criteria, validation, and the general shape of the response. It stops short of specifying the exact response structure, pagination, or error behavior, which would make it 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?
The only parameter, county, has full schema description coverage with an example and format details. The description adds contextual references like 'county-wide' and 'county only response,' but it does not materially expand on what the county value should be beyond what the schema already states.
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 opens with a specific action and resource: 'Discover a bounded county-wide family of Overture taxonomy_primary co-location candidates.' It goes well beyond a tautology and includes algorithmically distinctive details, but it does not explicitly contrast this tool with the sibling analyzePlaceColocation, so differentiation is more inferred than stated.
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 strongly implies the use case: discovering county-wide co-location candidates. However, it never explicitly states when to prefer this tool over alternatives such as analyzePlaceColocation or queryPlaces, nor does it provide any exclusions or 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.
executeDatasetQueryPlanExecute a dataset query planA
Execute one typed, bounded aggregate plan over a county's property or permit query table. The server independently allowlists fields, operators, grouping, measures, row/group/time budgets, compiles identifiers itself, and binds every value. Callers cannot provide SQL, URLs, joins, projections, expressions, raw-row queries, or mutations. Returns exact numerator, measured denominator, support, null completeness, median where relevant, canonical hashes, and query-table provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and handles it well: it reveals server-side behavior (allowlisting fields/operators/grouping/measures/budgets, compiling identifiers, binding values), explicitly forbids mutations and raw SQL, and enumerates return fields (numerator, denominator, support, null completeness, median, canonical hashes, provenance). It does not cover error behavior or auth requirements, but still provides substantial behavioral 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?
Four sentences, each earning its place: core purpose, server-side validation behavior, caller restrictions, and return fields. The most important operational fact is front-loaded, and there is no redundant or vague filler.
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 complex nested plan with no output schema and no annotations, the description adequately covers behavioral constraints and the return payload. Yet it lacks guidance on constructing a valid plan (required fields, defaults, measure object shapes) and does not connect to related tools such as getDatasetQueryCapabilities or the query schea tools, leaving the agent to infer how to assemble a query plan from scratch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does mention plan ingredientsβfields, operators, grouping, measures, row/group/time budgetsβand clarifies that the server compiles identifiers and bounds values. However, it does not explain the plan object's required properties (contractVersion, dataset, county, measure, budgets), the meaning of scopeFilters, groupBy, or order, or the accepted measure variants. It partially compensates but leaves many semantics to schema inference.
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 opens with a specific verb and resource: 'Execute one typed, bounded aggregate plan over a county's property or permit query table.' It further distinguishes the tool from siblings by explicitly excluding SQL, URLs, joins, projections, expressions, and raw-row queries, making clear that this is the constrained aggregate-plan executor rather than a general query 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?
There is no explicit statement of when to use this tool versus siblings like queryProperties, queryPermits, or getDatasetQueryCapabilities. The context is implied by 'typed, bounded aggregate plan', and the statement that callers cannot provide raw-row queries implies it is not for raw row retrieval, but no direct alternatives or conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findPropertiesInAreaFind properties in an areaA
Returns the set of properties whose centroid (latitude/longitude) falls inside a user-supplied bounding box or polygon. Provide exactly one of bbox or polygon. Reads the per-county property query table (falls back to the derived geo index); no NOAA/FEMA geometry is used.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | User-supplied bounding box of coordinates | |
| county | No | County whose data to read (case-insensitive). Optional: when the deployment serves a single/default county it is inferred; otherwise names which county's query table to search. | |
| polygon | No | User-supplied polygon ring of coordinates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It reveals that matching is based on centroid inclusion, that it reads a per-county property query table with a fallback to a derived geo index, and that it ignores NOAA/FEMA geometry. These details add meaningful behavioral context beyond the schema, though some edge-case behavior such as error handling or empty results is not covered.
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 compact and front-loaded: it states the output and core filtering logic first, then the exclusive-or constraint, then the data-source nuance. Every sentence carries useful information 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 the tool's moderate complexity, the description covers the main decision points: what is returned, how geometry is interpreted, which data sources are used, and how the two geometry parameters relate. Since there is no output schema, explicitly stating that it returns a set of properties is helpful. It could mention return format or empty-result behavior, but that is a minor 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?
The schema already has 100% parameter coverage, so the baseline is 3. The description adds useful semantic value by enforcing the mutually exclusive choice between bbox and polygon and clarifying the optional/inferred behavior of county, which goes beyond the raw 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?
Description names a specific verb and resource: it returns the set of properties matching a spatial centroid predicate. It also distinguishes itself from sibling tools by emphasizing the bounding-box/polygon filter and by stating that no NOAA/FEMA geometry is used.
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 instruction: 'Provide exactly one of bbox or polygon.' It also explains the conditional need for the county parameter depending on deployment. It does not explicitly name sibling alternatives or when to prefer this over queryProperties/sumPropertyValueInArea, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDatasetQueryCapabilitiesGet dataset query capabilitiesA
Describe bounded aggregate query capabilities for a county's property and permit datasets. Returns only allowlisted non-PII fields, types, operators, measures, null semantics, hard budgets, and query-table identity. It returns no source rows and accepts no SQL or data URL.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | One published county key/name, e.g. 'lee' or 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: returns only allowlisted non-PII metadata, no source rows, no SQL/data URL. This goes beyond a generic 'get capabilities' line and informs the agent about safe, non-row-returning behavior, though it doesn't explicitly state auth, rate limits, or side-effect-freedom.
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 compact sentences. The first sentence front-loads the resource and scope, and the second sentence lists boundary conditions with no filler. Every clause adds useful 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 one-param, no-output-schema tool, the description is nearly complete: it names the input and explains the return categories and rejection behavior. It could be more complete by noting how this relates to the sibling query-schema tools, but it 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 description coverage is 100%, and the schema already documents the county param with pattern, length, and example. The description adds the framing that it covers a county's property and permit datasets, but doesn't provide additional parameter semantics beyond what the schema property description already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Describe bounded aggregate query capabilities for a county's property and permit datasets.' It also enumerates what is returned (allowlisted non-PII fields, types, operators, measures, null semantics, hard budgets, query-table identity) and explicitly says it returns no source rows and accepts no SQL, which distinguishes it from query-execution and row-returning siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use: when you need query capability metadata for a county's property/permmit datasets. It also gives a boundary by stating it returns no source rows and accepts no SQL/data URL, which implies other tools handle execution. However, it doesn't explicitly name sibling alternatives or provide 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.
getOracleDatasetInfoGet Oracle open-data dataset infoA
Returns dataset-level metadata for a county: county, propertyCount (the catalog-bound appraisal row count when canonical coverage is available, otherwise a live query-table count), state, and provenance/CID fields on the legacy path. When per-source coverage is configured, also returns datasets[] with, per source (appraisal, permits, sunbiz, bbb), ingestedCount, expectedCount, completionPercent, and first/last loaded timestamps β so callers can qualify partial answers by coverage. For a coverage-only county (no property dataset served) propertyCount is null and propertyDatasetAvailable is false, so callers can distinguish a missing property table from a county with zero properties.
| Name | Required | Description | Default |
|---|---|---|---|
| county | No | County to report dataset info for (case-insensitive). Selects which county's open data to read when the deployment serves multiple counties. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to lean on, the description carries full behavioral burden and does so thoroughly. It reveals that propertyCount can be either a catalog-bound count or a live query-table count, that provenance/CID fields appear only on the legacy path, that per-source coverage is conditional, and that coverage-only counties return propertyCount null with propertyDatasetAvailable false. This lets callers interpret partial results correctly.
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 and then proceeds from common return fields to conditional expansions to the special coverage-only case. Every sentence carries distinct information, and there is no filler or restatement of the tool name.
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 and annotations, the description is remarkably complete: it names the return fields, explains the two computation paths for propertyCount, details the per-source datasets array, and explicitly covers the null-property count edge case. An agent could confidently interpret the response without 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?
There is only one parameter, county, and the schema already describes it including case-insensitivity, so schema coverage is effectively 100%. The description reinforces that output is per-county but does not add new semantic detail about the parameter itself; 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 states a specific verb and resource: 'Returns dataset-level metadata for a county.' It enumerates the returned fields and conditional variants, making it clearly distinct from sibling tools that retrieve individual properties, schemas, permits, or query plans.
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 clearly implies it is the tool for county-level dataset metadata and explains conditional behaviors, but it never explicitly says when to use this tool instead of a sibling like getOracleProperty or getPropertySchema. No alternatives or exclusions are named, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getOraclePropertyGet Oracle open-data propertyA
Fetch the full consolidated property JSON (appraisal, permits, Sunbiz, BBB) from IPFS. Provide exactly one of parcelIdentifier, propertyId, or cid.
| Name | Required | Description | Default |
|---|---|---|---|
| cid | No | IPFS CID for the consolidated property JSON | |
| county | No | County to look up the parcel/property in (case-insensitive). Selects which county's open data to read when the deployment serves multiple counties. | |
| propertyId | No | The property UUID β looked up in the manifest to resolve its IPFS CID | |
| parcelIdentifier | No | The property parcel identifier (digits) β looked up in the manifest to resolve its IPFS CID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does reveal that the tool fetches from IPFS, returns a consolidated JSON, and requires exactly one of three identifiers. But it does not disclose failure modes, not-found behavior, or what happens if the county parameter is omitted or combined with an identifier.
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 compact and front-loaded: the primary action and resource appear first, followed by the key invocation rule. Every sentence earns its place with no redundant or filler content.
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 fetch tool with no output schema, the description names the returned artifact and its composition, and the input schema covers parameter details. The main gap is the lack of explicit error/not-found behavior and clarification of how county interacts with the three identifier options.
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 baseline is 3. The description adds value beyond the schema by stating the mutual-exclusivity rule ('exactly one of parcelIdentifier, propertyId, or cid'), which the schema does not express through required fields or oneOf constraints. It also implies county is optional context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and names a concrete resource ('full consolidated property JSON') with its contents (appraisal, permits, Sunbiz, BBB). This clearly distinguishes it from permit-only siblings like getPropertyPermits, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit invocation constraint ('Provide exactly one of parcelIdentifier, propertyId, or cid'), which is valuable usage guidance. However, it does not explicitly state when to use this tool versus sibling tools like queryProperties or listOracleProperties, leaving the when-to-use distinction mostly implied by the word 'consolidated'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPermitCoverageGet permit coverage by sourceA
Returns per-source-system permit coverage for a county from the 'permits' query table: each source_system with its permit_count and completion_date range (earliest/latest), plus the overall total. The donphan agent uses this to QUALIFY aggregate permit answers (permit data lags appraisals and some sources may have NULL dates).
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | County to report permit coverage for (case-insensitive), e.g. 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well by disclosing the underlying data source, the aggregation behavior, and important caveats about data lag and NULL dates. It does not mention permissions, response shape, or ordering, but for a simple read-only coverage query the key behavioral traits are transparent.
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 with no wasted words. The first sentence front-loads what the tool returns and the second provides valuable usage context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description is largely complete: it states the input, the output fields, the source table, and the motivating use case. It could be slightly stronger by specifying the exact response structure or how NULL dates are represented, but nothing critical is missing for correct selection and 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 schema already covers the single 'county' parameter at 100% with a clear example and case-insensitivity note. The description adds no additional parameter-level meaning, 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?
The description uses a specific verb ('Returns') and names the exact resource: per-source-system permit coverage for a county from the 'permits' query table. It enumerates the outputs (source_system, permit_count, completion_date range, overall total), which clearly distinguishes it from sibling tools like queryPermits or getPropertyPermits that focus on individual permit records rather than aggregate coverage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when the agent needs to QUALIFY aggregate permit answers, because permit data lags appraisals and some sources may have NULL dates. It does not explicitly name alternatives or state when not to use it, so it falls short of a 5, but the usage context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPermitQuerySchemaGet permit query schemaA
Returns the column list, DuckDB types, and a one-line description of each column of the 'permits' query table for a county, so queryPermits can be written without guessing. Notes that date/value fields are frequently NULL depending on the permit source.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | County to describe (case-insensitive), e.g. 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses the exact return content and adds a useful data-quality caveat that date/value fields are frequently null depending on permit source. It does not discuss error handling or permissions, but for a metadata-read operation this is acceptable.
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 with no redundancy: the first leads with the action and return contents, the second supplies a relevant caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter metadata tool with no output schema, the description is complete: it states the input, the return contents, and a key behavioral caveat. The sibling list includes listPublishedCounties, but omitting that as a prerequisite is a minor 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?
The only parameter, county, is already fully documented in the schema with minLength, case-insensitivity, and an example. The description reaffirms that county selects the permits query table but adds little semantic value beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Returns' and precisely specifies the resource: the 'permits' query table's column list, DuckDB types, and one-line descriptions, scoped by county. It also states the intended use ('so queryPermits can be written without guessing'), which distinguishes it from sibling schema tools like getPropertyQuerySchema and getPlaceQuerySchema.
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?
It explicitly ties the tool to queryPermits, signaling the agent to call this before writing permit queries. It does not list alternatives or exclusions, but the 'for a county' scoping and queryPermits reference provide clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPlaceQuerySchemaGet published places query schemaA
Returns the real published places parquet columns, field descriptions, structured queryPlaces contract, safety limits, Overture release/provenance and licence-gate metadata, and honest null completion semantics for a county.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | Published county key/name, e.g. 'lee' or 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is an introspection/metadata operation, mentions safety limits, license-gate metadata, and even 'honest null completion semantics.' It could add auth/rate-limit details, but for a schema-lookup tool it is notably transparent.
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 information-dense sentence with the key object front-loaded. The long enumeration of metadata types is slightly run-on, but every listed element contributes to the agent's understanding.
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?
Even without an output schema, the description thoroughly catalogs what will be returned: columns, descriptions, contract, limits, release/provenance, license metadata, and null semantics. The required parameter is fully covered by the schema. Minor gaps like output shape and failure behavior do not undermine selection or 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 single parameter 'county' is already fully documented in the input schema (format, example, constraints). The description only reinforces 'for a county' without adding new parameter-level meaning, so the baseline score of 3 applies.
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 opens with a strong verb, 'Returns', and names a highly specific resource: published places parquet columns, field descriptions, the queryPlaces contract, safety limits, and metadata. This clearly distinguishes it from property/permits query-schema siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: it is for county-level published places schema information and explicitly ties to the queryPlaces contract. It does not include explicit exclusions or list alternatives, but the resource naming makes when-to-use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPropertyPermitsGet property permits (on-demand)A
Fetch permit records for a property by parcel ID. Returns cached permits immediately if available. If not cached, enqueues a harvest job (reuses the permit-harvest Lambda) and returns a status indicating the harvest is in progress β poll again after ~90 seconds. Permits are cached to IPFS after harvest completes.
| Name | Required | Description | Default |
|---|---|---|---|
| parcelId | Yes | The property parcel identifier (digits, e.g. '1234567890000') | |
| countyFips | No | County FIPS code (default: 12071 = Lee County FL) | 12071 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It does so thoroughly: it discloses caching, the asynchronous harvest enqueing side effect, IPFS storage after completion, and the polling requirement. This is well beyond what the schema or title would imply.
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 sentences, each carrying distinct value: what it fetches, the caching/async behavior, and the persistence layer. The most important action and condition are front-loaded; no filler or repetition.
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 tool has no output schema, but the description explains both possible outcomes (cached permits versus in-progress status) and gives the timing for polling. This is sufficient for an agent to invoke it and interpret the result without additional hidden assumptions.
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 explains both parcelId and countyFips with examples and defaults. The description adds only 'by parcel ID' but does not materially extend parameter semantics 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?
Starts with a specific verb and resource: 'Fetch permit records for a property by parcel ID.' It clearly defines the scope (property-level) and the primary key (parcel ID), which distinguishes it from sibling query-oriented tools such as queryPermits.
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?
Gves a clear operational contract: returns cached data immediately, otherwise enqueues a harvest job and tells the caller to poll again after ~90 seconds. It does not explicitly contrast with sibling tools like queryPermits or getPermitCoverage, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPropertyQuerySchemaGet property query schemaA
Returns the column list, DuckDB types, and a one-line description of each column of the 'properties' query table for a county, so queryProperties can be written without guessing. Notes that some coverage-dependent fields may be NULL.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | County to describe (case-insensitive), e.g. 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden. It clearly states the operation is read-only ('Returns'), lists what will be returned, and adds a concrete caveat that some coverage-dependent fields may be NULL. It does not detail error handling or prerequisites, but for a simple schema introspection tool this is sufficient.
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-load the return value, state the intended use, and end with a caveat, with no filler or repetition of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the description covers what is returned, why it should be used, and a relevant nullability caveat. An agent can select and invoke it correctly for its intended purpose without needing 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 single county parameter is already fully described in the schema, including case-insensitivity and an example; the description adds no new parameter-level detail, so it earns the baseline 3 for high schema coverage.
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 opens with the specific verb 'Returns' and names the exact resource: column list, DuckDB types, and one-line descriptions for the 'properties' query table per county. It also ties the tool to the sibling queryProperties, so it is clearly distinct from related schema tools like getPropertySchema or getPlaceQuerySchema.
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 phrase 'so queryProperties can be written without guessing' is a clear context cue to call this before composing a queryProperties call. It does not, however, name alternatives or explicitly state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPropertySchemaGet property schema by class and propertyB
Returns the full JSON Schema object for a class property
| Name | Required | Description | Default |
|---|---|---|---|
| className | Yes | Class name, case-insensitive | |
| propertyName | Yes | Property name, case-insensitive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden for behavioral disclosure. It does communicate that the tool is a read operation returning a full JSON Schema object, but it doesn't mention error handling, case-insensitivity, authorization requirements, or any limitations. This leaves important behavioral context undisclosed.
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 concise sentence that front-loads the primary behavior. It contains no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter lookup with high schema coverage, the description plus schema is largely sufficient. However, with no output schema and no annotations, the tool doesn't explain failure behavior or how this differs from the similarly named getPropertyQuerySchema. The definition is adequate but leaves some context for an agent to infer.
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, including case-insensitive semantics for both parameters. The description itself adds no parameter-level detail beyond identifying a 'class property,' so it does not improve on the schema. A baseline 3 is appropriate because the schema already documents the parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'Returns the full JSON Schema object for a class property.' It distinguishes itself from most siblings by emphasizing the returned artifact. However, it doesn't clarify how this relates to similar sibling tools like getPropertyQuerySchema, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as listPropertiesByClassName or getPropertyQuerySchema. The description implies a lookup operation but gives no conditions, prerequisites, or exclusions, which is a meaningful gap given the large sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getVerifiedScriptExamplesGet verified script examplesC
Get most relevant working examples of the code, that maps data to the Elephant schema
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Number of results (default 5) | |
| query | Yes | Description of the example meaning. Wll be used to search for similar examples. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It only says 'Get most relevant working examples' and does not explain what 'verified' means, how results are ranked, what the response contains, or any limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the core action, and has no filler. It is slightly awkward grammatically, but it is appropriately 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 simple two-parameter search tool, the description and schema are enough to make a basic call. However, with no output schema and no annotations, the description does not clarify what the returned examples look like, how 'verified' is determined, or how topK affects the retrieval, leaving notable 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%, so both 'query' and 'topK' are already documented in the input schema. The tool-level description adds useful context that examples map data to the Elephant schema, but it does not provide deeper parameter semantics 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 uses a specific verb ('Get') and resource ('verified script examples') and adds the scoping detail that the code maps data to the Elephant schema. It is clear enough to identify the tool's purpose, though it does not explicitly contrast it with sibling query 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?
There is no guidance on when to use this tool versus the many sibling list/query tools, and no mention of alternatives or exclusions. The agent must infer when this retrieval tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listClassesByDataGroupList classes by data groupB
List classes for an Elephant data group with names and descriptions
| Name | Required | Description | Default |
|---|---|---|---|
| groupName | Yes | The data group name, case-insensitive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The verb 'List' implies a read-only operation and the phrase 'with names and descriptions' discloses the expected output shape. However, the description says nothing about ordering, pagination, error behavior, or what happens for invalid/unknown data groups.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the action and resource, and contains no wasted words. It is efficient, though the singular 'Elephant' jargon could have been defined without harming 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 one required parameter, 100% schema coverage, and no output schema, the description covers the essential invocation and return content. It lacks an example of a valid data group and does not specify error handling, but the operation is simple enough that this is a minor 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?
The schema already fully describes the only parameter groupName, including its case-insensitive behavior, so schema coverage is 100%. The description adds no parameter-specific meaning beyond reusing the term 'data group'; there are no examples, constraints, or format hints 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 uses a specific verb ('List') and resource ('classes for an Elephant data group'), and even indicates the returned content ('names and descriptions'). It does not explicitly contrast itself with sibling list tools like listPropertiesByClassName, but the resource and grouping concept make the core purpose 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?
No guidance is given for when to choose this tool over alternatives such as listPropertiesByClassName, listPublishedCounties, or queryClasses. The intended context can be inferred from the tool name, but the description does not state it or name any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listOraclePropertiesList Oracle open-data propertiesA
Paginated discovery of properties for a county. Returns slim entries (propertyId, parcelIdentifier, cid, county, fileSizeBytes) plus summary fields (address, marketValue, ownerName) when served from the query table. Use getOracleProperty to fetch full consolidated data for a specific entry.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default 50, max 500) | |
| county | No | Filter by county name (case-insensitive) | |
| offset | No | Zero-based offset for pagination (default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does disclose pagination, slim vs summary field composition, and a conditional 'query table' behavior. However, it does not explicitly state read-only/side effects or clarify what 'served from the query table' means, leaving some behavioral ambiguity.
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 dense sentences with no filler. The action, scope, output highlights, and alternative tool are all front-loaded and each clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description provides enough return-field detail and pagination context to guide invocation. Minor gapsβthe meaning of 'query table' and explicit confirmation of read-only behaviorβprevent a perfect score.
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 defaults and constraints already documented for limit, county, and offset. The description adds contextual emphasis on county filtering and pagination but no new parameter-level 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?
States a specific verb+resource scope: paginated discovery of properties for a county. It also names the output content and explicitly contrasts with getOracleProperty, making the tool readily distinguishable from its sibling get-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?
Clearly tells the agent to use getOracleProperty when full consolidated data for a specific entry is needed, which is an explicit routing instruction. It does not discuss broader listing/query siblings like queryProperties, but the primary alternative is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPropertiesByClassNameList properties by class nameA
Lists JSON Schema property names for an Elephant class (excludes source_http_request)
| Name | Required | Description | Default |
|---|---|---|---|
| className | Yes | The class name, case-insensitive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds a meaningful detail ('excludes source_http_request') and signals a read-only list operation via 'Lists'. However, it doesn't describe behavior for nonexistent classes, ordering, or the exact response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and object, with the key exclusion parenthetically appended. Every word earns its place and there is no filler 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?
For a simple listing tool with no output schema, the description conveys the core return value and a key exception. However, absent annotations, it doesn't cover edge-case behavior (e.g., unknown class names) or explicitly describe the response shape beyond 'property names', leaving some 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?
The input schema fully documents the single parameter (className: string, minLength 1, case-insensitive), so schema description coverage is 100%. The description adds no extra parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists'), identifies the exact resource ('JSON Schema property names for an Elephant class'), and explicitly notes an exclusion ('excludes source_http_request'). This clearly distinguishes it from sibling tools like listClassesByDataGroup or getPropertySchema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need property names for an Elephant class, but it does not explicitly state when to prefer it over alternatives or when not to use it. The context is clear, but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPublishedCountiesList published Oracle countiesA
Returns every county in Oracle's canonical published-county catalog, including stable county keys, state codes, public query/coverage/permit URLs, nullable placesTableUrl, update timestamps, and a catalog revision. Use this tool to discover newly published counties and places availability instead of maintaining a hard-coded list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool returns every county, identifies the catalog as canonical, lists the included fields, and notes that placesTableUrl is nullable. This is strong transparency for a zero-parameter read-only list operation, though it does not mention sorting, pagination, or response size.
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 and every sentence earns its place. The first sentence states what the tool returns; the second sentence gives usage guidance. It is front-loaded with the core behavior and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema list tool, the description is complete. It explains what the returned data contains, mentions nullable fields, and provides a concrete use case. No additional context is needed for an agent to invoke this 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?
There are zero parameters, and schema coverage is 100% with no properties. The baseline for zero parameters is 4, and the description appropriately adds no parameter-specific semantics because none exist.
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 every county in Oracle's canonical published-county catalog, enumerating the contained fields. It distinguishes itself from sibling tools by focusing specifically on the published-county catalog list, which none of the siblings do.
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 to use this tool to discover newly published counties and places availability instead of maintaining a hard-coded list. This gives the agent a clear decision rule for when this tool is appropriate, even though no sibling tool is named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryPermitsQuery permits (SQL)A
Run a read-only SQL SELECT against a county's flat permit query table (view name 'permits', one row per building permit) backed by embedded DuckDB. Use getPermitQuerySchema first to see available columns and getPermitCoverage to qualify aggregate answers by source. SAFETY: a single SELECT statement only (a leading WITH/CTE is allowed); multiple statements and any mutating or file/extension keyword (INSERT/UPDATE/DELETE/COPY/ATTACH/INSTALL/LOAD/PRAGMA/CALL/SET β¦) are rejected; results are always capped at 1000 rows.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single read-only SELECT statement over the 'permits' view. | |
| limit | No | Max rows to return (default 100, max 1000). Always enforced. | |
| county | Yes | County to query (case-insensitive), e.g. 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does so thoroughly: it discloses read-only behavior, allows a leading WITH/CTE, lists rejected mutating and file/extension keywords, and states the 1000-row result cap. This gives the agent a clear safety envelope before calling.
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 compact and front-loaded: purpose first, then companion tools, then safety rules. Every sentence earns its place, and the safety constraints are grouped in a single clearly labeled sentence rather than buried in prose.
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 SQL tool with no annotations and no output schema, this is complete: it explains the data source, tells the agent how to learn the columns, warns about aggregates/source qualification, and fully specifies the allowed SQL envelope and row cap. The agent has everything needed to call and 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 schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds value beyond the schema by defining the SQL constraint surface (single SELECT, WITH allowed, prohibited keywords) and pointing to getPermitQuerySchema for available columns, which enriches the meaning of the sql and limit 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 states a specific verb and resource: run a read-only SQL SELECT against a county's permits view backed by embedded DuckDB. It also clarifies the data grain (one row per building permit) and names the relevant companion tools, so it is unmistakably distinct from property/place query 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?
It clearly tells the agent to call getPermitQuerySchema first to discover columns and getPermitCoverage to qualify aggregate answers, which is practical usage context. It does not explicitly state when NOT to use this tool versus queryProperties/queryPlaces, but the purpose and preconditions are strong enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryPlacesQuery published Overture placesA
Run a structured read-only query over a county's catalog-authorized Overture places parquet. Supports exact/contains category filters, '/'-hierarchy roll-ups, name/locality/postcode/status/confidence filters, hosted-service include/exclude/only, deterministic row pages with totalCount, count-only mode, and grouped taxonomy_primary aggregates. Call getPlaceQuerySchema first. Callers cannot provide SQL or data URLs; results are capped at 1000.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Rows page, filtered count, or primary-category groups. | rows |
| limit | No | Rows/groups per page (default 100, max 1000). | |
| county | Yes | Published county key/name, e.g. 'lee' or 'Lee'. | |
| offset | No | Zero-based page offset (default 0, max 1000000). | |
| sortBy | No | Allowlisted row sort field; ignored for grouped mode. | gersId |
| filters | No | ||
| sortDirection | No | Row sort direction; ignored for grouped mode. | asc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does so well: it state read-only, catalog-authorized scope, deterministic paging with totalCount, count-only mode, grouped aggregates, the prohibition on raw SQL/data URLs, and the 1000-row cap. These are genuine behavioral disclosures beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and then compresses many capabilities into one dense sentence. Every sentence contributes: purpose, feature summary, prerequisite, and constraints. It is concise but the long capability list is dense enough that it could be slightly easier to scan.
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 a complex query tool with no output schema and no annotations, the description covers modes, filter dimensions, count/aggregate behaviors, paging determinism, sequencing, and hard limits. It does not spell out the row return shape, but with 86% schema coverage and the feature summary this is still 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?
Schema description coverage is 86%, and the schema already gives per-parameter descriptions, enums, defaults, and constraints. The description summarizes capabilities (category filters, hierarchy roll-ups, modes) but does not add per-parameter semantics beyond schema; baseline 3 applies.
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 opens with a clear verb + resource: 'Run a structured read-only query over a county's catalog-authorized Overture places parquet.' This distinguishes queryPlaces from property/permit query siblings by resource and read-only intent. The title and first sentence align with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing guidance ('Call getPlaceQuerySchema first') and clear constraints ('Callers cannot provide SQL or data URLs; results are capped at 1000'). It does not explicitly name sibling alternatives or say when not to use this tool, but the Overture places resource makes the intended use case evident alongside queryProperties/queryPermits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryPropertiesQuery properties (SQL)A
Run a read-only SQL SELECT against a county's flat property query table (view name 'properties', one row per property) backed by embedded DuckDB. Use getPropertyQuerySchema first to see available columns. SAFETY: a single SELECT statement only (a leading WITH/CTE is allowed); multiple statements and any mutating or file/extension keyword (INSERT/UPDATE/DELETE/COPY/ATTACH/INSTALL/LOAD/PRAGMA/CALL/SET β¦) are rejected; results are always capped at 1000 rows.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | A single read-only SELECT statement over the 'properties' view. | |
| limit | No | Max rows to return (default 100, max 1000). Always enforced. | |
| county | Yes | County to query (case-insensitive), e.g. 'Lee'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the safety behavior: only single SELECT statements are accepted, leading WITH/CTE is allowed, mutating and file/extension keywords are rejected, and results are capped at 1000 rows. This gives an agent strong grounding for safe 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?
The description is compact and front-loaded with the core purpose, followed by a clearly labeled SAFETY section. Every sentence earns its place, and the keyword list is necessary for correct use of a SQL query tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description tells the agent what table to query, how to discover columns, what SQL is permitted, and the hard row limit. This is sufficient for an agent to select and invoke the tool correctly without additional documentation.
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 already covers all parameters at 100%, so the baseline is 3. The description adds meaningful semantic detail about the sql parameter's allowed statement form and rejection keywords, and reinforces the limit parameter's enforced cap, going slightly 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 runs a read-only SQL SELECT against a county's 'properties' view, backed by embedded DuckDB. It names the specific resource and includes a pointer to getPropertyQuerySchema for columns, helping distinguish it from sibling query tools like queryPlaces and queryPermits.
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?
It provides a clear prerequisite: use getPropertyQuerySchema first to see available columns. It also establishes the scope of use by restricting queries to a single read-only SELECT over the properties table, though it does not explicitly enumerate when to prefer sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sumPropertyValueInAreaSum property value in an areaA
Returns the exact sum of avm_value over the properties whose centroid falls inside a user-supplied bounding box or polygon, plus the in-area count. Null valuations are treated as 0. Provide exactly one of bbox or polygon. Reads the per-county property query table (falls back to the derived geo index).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | User-supplied bounding box of coordinates | |
| county | No | County whose data to read (case-insensitive). Optional: when the deployment serves a single/default county it is inferred; otherwise names which county's query table to search. | |
| polygon | No | User-supplied polygon ring of coordinates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full behavioral disclosure burden. It adds meaningful traits beyond the schema: null valuations are treated as 0, the result includes a count, and the tool reads from a per-county property query table with a fallback to a derived geo index. It does not detail error behavior or output type, but the core behavioral expectations are covered.
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 senences with no filler, front-loading the core return value and geometry contract. The null-handling and data-source notes are useful and compactly stated.
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 states what is returned: the sum and the in-area count. It also covers key input constraints, null behavior, and fallback behavior. It does not mention edge cases such as empty result sets or invalid polygons, but the core information needed for correct invocation is present.
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 baseline is 3, but the description adds non-obvious parameter semantics: exactly one of bbox or polygon must be used, and the geometry filter is based on centroid fallback rather than arbitrary overlap. It also clarifies that the county parameter may be inferred in single-county deployments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns the exact sum of avm_value over properties whose centroid falls inside a user-supplied bounding box or polygon, plus the in-area count. This clearly separates it from sibling tools like findPropertiesInArea or queryProperties, which are oriented toward finding or listing properties rather than aggregating values.
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 instructs the agent to provide exactly one of bbox or polygon, which is essential for correct use. It also clarifies the centroid-containment rule and the read path. It does not explicitly name alternatives or state when not to use this tool, but the aggregation purpose makes the intended context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v1.12.1- First observed
analyzePlaceColocation - First observed
discoverPlaceColocationCandidates - First observed
executeDatasetQueryPlan - First observed
findPropertiesInArea - First observed
getDatasetQueryCapabilities - First observed
getOracleDatasetInfo - First observed
getOracleProperty - First observed
getPermitCoverage - First observed
getPermitQuerySchema - First observed
getPlaceQuerySchema - First observed
getPropertyPermits - First observed
getPropertyQuerySchema - First observed
getPropertySchema - First observed
getVerifiedScriptExamples - First observed
listClassesByDataGroup - First observed
listOracleProperties - First observed
listPropertiesByClassName - First observed
listPublishedCounties - First observed
queryPermits - First observed
queryPlaces - First observed
queryProperties - First observed
sumPropertyValueInArea
TDQS
Scored across 22 tools
Most tools have distinct purposes, but several names collide across subdomains: getPropertySchema (Elephant schema) vs getPropertyQuerySchema (county query table), and listPropertiesByClassName vs listOracleProperties. The detailed descriptions help, but an agent could easily misroute these calls.
The server mostly follows a predictable snake_case verb-noun pattern, with consistent query/schema pairs like queryProperties/getPropertyQuerySchema and queryPermits/getPermitQuerySchema. A few deviations such as getVerifiedScriptExamples and the overloaded getProperty* prefix slightly weaken the pattern, but naming is still largely predictable.
With 22 tools, the server sits in the heavy range and spans several related subdomains: schema metadata, property data, permits, places, and colocation analysis. Each tool has a real purpose, but the surface could reasonably be pruned or split without losing capability.
The tool set covers discovery, schema introspection, data retrieval, query execution, coverage qualification, and advanced analytics across the main entities. Minor gaps exist, such as no direct address/owner search beyond SQL and no place-detail-by-ID operation, but these are workable through existing tools.
Maintenance
Related MCP Connectors
Connect your team's living knowledge base β docs, data, issues, CRM β to Claude and ChatGPT.
Connect Claude, Cursor, or ChatGPT to your business data. Ask questions, get answers.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces β chat, links, and tasks. One-click OAuth.
Build and supervise fleets of agents from Claude Code, Codex or Cursor. Connects over OAuth.
Related MCP Servers
AlicenseBqualityDmaintenanceConnects Claude and other MCP clients to Elasticsearch data, allowing users to interact with their Elasticsearch indices through natural language conversations.31,413711Apache 2.0- FlicenseNot gradedqualityDmaintenanceProvides Claude AI with persistent, searchable memory management across sessions using SQL database, semantic analysis with multi-provider LLM support (Anthropic/Ollama), vector search via ChromaDB, and graph-based knowledge relationships through Neo4j integration.1-
- AlicenseAqualityCmaintenanceSelf-hosted personal knowledge graph for Claude that persists across sessions, devices, and tools. Built on Neo4j with local semantic embeddings; OAuth 2.1 lets Claude Code, Claude Desktop, and claude.ai web all hit the same graph.23672MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude Desktop with persistent, structured memory and semantic search via a local SQLite knowledge graph, plus a web UI for visualization and management.-