atlaspi-mcp
The AtlasPI MCP server provides comprehensive access to a structured historical geographic database spanning 4,500 BCE to 2024 CE, enabling AI agents to query, explore, and analyze geopolitical history across civilizations.
Entity & Territory Search
Search historical entities (empires, kingdoms, city-states, republics, etc.) by name, year, type, continent, or status
Get full entity details: GeoJSON boundaries, confidence scores, capital coordinates, citations
Batch-fetch up to 100 entities by ID; fuzzy search across scripts/languages
Find similar entities ranked by type, time overlap, duration, and confidence
Geographic & Spatial Queries
Nearby entities: find geopolitical entities closest to a lat/lon in a given year
Where was (reverse geocoding): given coordinates + year, find which historical state controlled that location (with full history option)
Nearest historical city: find historical cities closest to given coordinates
Snapshots & World State
Snapshot at year: all active entities in a given year, filtered by type/continent
World snapshot: active periods, top entities, events, cities, and dynasty chains for a year in one call
What changed between two years: diff of entities that appeared, disappeared, or persisted
Events & History
Search events by year range, type (BATTLE, TREATY, GENOCIDE, REVOLUTION, EPIDEMIC, etc.), status, and
known_silenceflagGet event details with entity roles (MAIN_ACTOR, VICTIM, PARTICIPANT, etc.) and ethical notes
Events for a specific entity, geolocated events for map display, and On This Day (by MM-DD across all years)
Timelines, Evolution & Comparisons
Entity evolution: chronological territorial changes, capital moves, and regime transitions
Full unified timeline: events + territory changes + succession transitions in one call
Compare two entities: time overlap, territorial extent, capitals, and sources
Dynasties & Succession Chains
Search chains by type (DYNASTY, SUCCESSION, COLONIAL, IDEOLOGICAL, etc.), region, or year
Get chain details with explicit transition types (CONQUEST, REVOLUTION, DECOLONIZATION, etc.) and violence flags
Find predecessors/successors for any entity
Cities, Trade Routes & Historical Periods
Search historical cities by year, type (CAPITAL, TRADE_HUB, PORT, FORTRESS, etc.), owning entity, or bounding box; colonial renames documented
Search trade routes by year, type (LAND, SEA, CARAVAN, etc.), and slavery involvement
List and query historical periods (Bronze Age, Renaissance, Cold War, etc.); find periods overlapping a year, entity, or event
Stats & Discovery
Dataset statistics: counts, breakdowns by type/continent/status, confidence averages
Random entity discovery, optionally filtered by type, year, continent, or status
Community Feedback
Submit corrections, missing sources, bias reports, or boundary disputes (human-reviewed)
List existing feedback and view aggregate feedback stats
Ethical Design: All data includes confidence scores and status (confirmed/uncertain/disputed). Explicit acquisition_method and transition_type avoid euphemisms for violence. known_silence flags suppressed records, colonial renames are documented, and slavery is flagged on trade routes.
Why AtlasPI exists
AI agents working with historical geography today face a fragmented landscape: raw shapefiles in Natural Earth, unstructured text in Wikipedia, scattered coordinates in Wikidata, and academic datasets locked behind incompatible formats. None of these were designed for machine consumption.
AtlasPI bridges this gap. It provides a single, structured REST API where an AI agent can ask "What territories existed in the Balkans in 1400?" or "Show me the boundary changes of the Ottoman Empire" and get back clean JSON with GeoJSON boundaries, confidence scores, academic citations, and honest metadata about what is certain and what is disputed.
Historical data is never neutral. Borders were drawn through conquest, names were imposed through colonization, populations were erased through genocide. AtlasPI does not sanitize this complexity -- it structures it, documents it, and makes it queryable.
Related MCP server: cesium-mcp
Screenshot

The web UI supports keyboard shortcuts, deep linking (/app?year=1000), continent filtering, time playback animation, dark/light mode, and full i18n (English/Italian). Try it live at atlaspi.it.
Quick Start
# Clone the repository
git clone https://github.com/Soil911/AtlasPI.git
cd AtlasPI
# Install dependencies
pip install -r requirements.txt
# Run the server (auto-seeds the database on first launch)
python run.pyThe API is now live at http://localhost:10100 and the interactive docs at http://localhost:10100/docs.
Docker
docker compose up --buildAPI Documentation
AtlasPI exposes 23 REST endpoints under /v1/. Full interactive documentation is available at /docs (Swagger UI) and /redoc when the server is running.
Core Endpoints
Method | Endpoint | Description |
|
| Query entities with filters (name, year, status, type) |
|
| Paginated list of all entities |
|
| Full detail for a single entity |
|
| Autocomplete search |
|
| List available entity types |
|
| Dataset statistics |
|
| Available continent/region filters |
|
| Random entity (with optional type/year/status/continent filters) |
|
| Aggregate stats by century, type, continent, status |
|
| Find entities near coordinates (with distance) |
|
| World state at a given year (summary + entities) |
|
| Structured comparison of two entities |
|
| Multi-entity comparison (2-4) with events, chains, overlap |
|
| Entities with overlapping time periods |
|
| Related entities by type or region |
|
| Full chronological evolution of an entity |
|
| Export as GeoJSON FeatureCollection |
|
| Export as CSV |
|
| Export timeline data |
|
| Service health check |
|
| Embeddable map view for iframes |
|
| Interactive entity comparison page |
Examples
Search for empires active in 1500 CE:
curl "http://localhost:10100/v1/entity?type=empire&year=1500"Get full details for entity #12:
curl "http://localhost:10100/v1/entities/12"Find entities contemporary to the Roman Empire:
curl "http://localhost:10100/v1/entities/1/contemporaries"Export all entities as GeoJSON:
curl "http://localhost:10100/v1/export/geojson" -o atlas.geojsonFind entities near Rome active in 100 CE:
curl "http://localhost:10100/v1/nearby?lat=41.9&lon=12.5&year=100&radius=500"Snapshot of the world in 1500 CE:
curl "http://localhost:10100/v1/snapshot/1500" | jq '.summary'Compare two entities side by side:
curl "http://localhost:10100/v1/compare/1/5"Response Example
{
"id": 1,
"name": "Imperium Romanum",
"name_variants": [
{"name": "Roman Empire", "language": "en"},
{"name": "Imperio Romano", "language": "es"}
],
"entity_type": "empire",
"year_start": -753,
"year_end": 476,
"status": "confirmed",
"confidence_score": 0.95,
"capital": {"name": "Roma", "lat": 41.9028, "lon": 12.4964},
"territory_changes": [...],
"sources": [
{"citation": "...", "source_type": "academic"}
]
}Dataset Overview
How this data is curated — disclosure and correction (2026-07-23)
Curation of non-boundary records (entities, events, cities, rulers, routes, sites) is AI-assisted: LLM research agents propose metadata and candidate citations, an adversarial verification step rejects citations that do not exist or do not support the claim, and the maintainer supervises the pipeline. Records are not systematically reviewed by professional historians. Until the human citation audit (protocol) is published, treat citations as machine-verified, not human-audited. Earlier versions of this documentation said the dataset was "hand-curated" — that wording was inaccurate and has been retired. Full details: METHODOLOGY §2.4 · ETHICS-028 (EN).
1,006 historical entities + 643 historical events spanning 6,500 years of human civilization, backed by 5,000+ academic sources and documenting 2,000+ territory changes. Plus 1,249 archaeological sites, 105 historical rulers, 29 historical languages, 104 dynasty chains, 41 trade routes, 252 historical cities, and 55 historical periods. Events include battles, treaties, epidemics, genocides, colonial violence, massacres, deportations and natural disasters — with ETHICS-007 (no euphemisms) and ETHICS-008 (known_silence flag for erased/suppressed records).
Coverage by Region
Region | Entities | Examples |
Asia | 195 | Mongol Empire, Qin/Han/Tang/Song/Ming, Tokugawa, Mughal, Khmer, Three Kingdoms |
Europe | 104 | Roman Empire, Byzantine, Kyivan Rus', Hanseatic League, Crusader states, Prussia |
Americas | 85 | Tawantinsuyu (Inca), Aztec, Maya, Haudenosaunee, Empire of Brazil, Taino |
Africa | 78 | Mali, Songhai, Kingdom of Kongo, Great Zimbabwe, Aksum, Zulu, Buganda |
Middle East | 70 | Achaemenid, Ottoman, Abbasid Caliphate, Rashidun, Kingdom of Jerusalem |
Oceania & Pacific | 8 | Aboriginal nations, Maori iwi, Kingdom of Tonga, Hawaiian Kingdom |
Entity Types
15 categories: empire | kingdom | republic | confederation | city-state | dynasty | colony | disputed_territory | sultanate | khanate | principality | duchy | caliphate | federation | city
Time Coverage
Earliest entity: 4500 BCE (ancient Mesopotamian civilizations)
Latest entity: 2024 (modern states and disputed territories)
Negative years represent BCE dates (e.g.,
-753= 753 BCE)
📖 Citation
If you use AtlasPI in research, teaching, or derivative datasets, please cite the project using the Zenodo concept DOI below. The concept DOI always resolves to the latest release — individual versions get their own per-release DOIs on top.
BibTeX
@software{atlaspi_2026,
author = {{AtlasPI Project}},
title = {AtlasPI: A structured historical geographic database for AI agents},
version = {6.13.0},
year = {2026},
doi = {10.5281/zenodo.19581784},
url = {https://doi.org/10.5281/zenodo.19581784}
}Plain-text citation
AtlasPI Project (2026). AtlasPI: A structured historical geographic database for AI agents, version 6.14.0. Zenodo. https://doi.org/10.5281/zenodo.19581784
Ethical Framework
Historical data carries the weight of conquest, displacement, and erasure. AtlasPI is built on four principles that govern every data decision:
1. Truth Before Comfort
Historical records include conquest, genocide, forced deportation, and cultural erasure. These facts are represented with precision, never sanitized. If a territory was seized by force, the acquisition_method field says so. If a population was decimated, the data shows it with sources. If a geographic name was imposed by erasing the original, both names are present.
2. No Single Version of History
Contested borders show all known versions, with dates and sources. Place names include the original local form alongside names in other relevant languages. Academic disputes are made explicit, not resolved by fiat. The database does not arbitrate history -- it documents it.
3. Transparency of Uncertainty
Every record carries a confidence_score from 0.0 to 1.0. Every data point includes sources[] with primary source citations. Records scoring below 0.5 are marked as status: "uncertain" (enforced at the data layer — see ETHICS-013; the distinct status: "disputed" is reserved for contested territories, ETHICS-003). An uncertain datum honestly labeled is more valuable than a fabricated certainty.
4. No Geographic or Cultural Bias
Place names use the local-language form as the primary name. Sources include non-Western historiography where available. Colonial conquests are documented from the perspective of the colonized, not only the colonizers.
These principles are enforced through automated ethical tests, documented decisions in
docs/ethics/, and# ETHICS:comments throughout the codebase. See CLAUDE.md for the full governance framework.
Architecture
Tech Stack
Component | Technology |
API | FastAPI (Python 3.11+) |
Database (dev) | SQLite |
Database (prod) | PostgreSQL + PostGIS |
Validation | Pydantic v2 |
Rate Limiting | SlowAPI |
Frontend | Vanilla JS + Leaflet.js |
Containerization | Docker (multi-stage build) |
CI | GitHub Actions (lint + test + build) |
Project Structure
atlaspi/
src/
api/ # FastAPI routes, schemas, error handling
db/ # SQLAlchemy models, database setup, seed data
ingestion/ # Data import pipelines, boundary extraction
validation/ # Confidence scoring engine
static/ # Web UI (HTML, CSS, JS)
data/
entities/ # Source entity data (JSON)
raw/ # Original unmodified source data
processed/ # Normalized data
tests/ # 260 tests: technical, ethical, security, performance, data quality
docs/
adr/ # Architecture Decision Records
ethics/ # Documented ethical decisions (ETHICS-001, 002, 003...)Key Design Decisions
Dual database support: SQLite for zero-config local development, PostgreSQL + PostGIS for production spatial queries.
Auto-seeding: The database populates itself on first launch from JSON entity files -- no manual migration needed.
GZip compression, CORS, rate limiting (60 req/min), and security headers enabled by default.
Structured logging: JSON format in production, human-readable in development.
Testing
The test suite covers five dimensions:
# Run all tests
pytest
# Run with verbose output
pytest -vCategory | What it verifies |
Technical | API responses, pagination, input validation, edge cases |
Ethical | ETHICS-001/002/003 compliance, disputed territory handling, confidence thresholds |
Security | CORS, security headers, structured error responses, rate limiting |
Performance | All endpoints respond in < 500ms |
Data Quality | Source completeness, regional diversity, entity type coverage |
Contributing
Contributions are welcome. Before you start:
Read CLAUDE.md -- it contains the project's core values and development conventions.
Check
docs/ethics/-- understand the ethical decisions already made.Check
docs/adr/-- understand the architectural decisions already made.
Guidelines
Code is written in English; documentation in Italian (except this README).
Every function touching sensitive historical data must include an
# ETHICS:comment explaining the design choice.Tests must cover ethical edge cases, not only technical ones.
New entity data must include
sources[]with verifiable academic citations.Disputed territories must have
confidence_score <= 0.7andstatus: "disputed".
Adding Historical Entities
Entity data lives in data/entities/ as JSON files. Each entity requires:
Primary name in the original/local language
At least one academic source
A confidence score reflecting source reliability
Territory changes with dated boundaries where available
Development Setup
# Install with dev dependencies
pip install -e ".[dev]"
# Lint
ruff check src/ tests/
# Test
pytest -vRoadmap
See ROADMAP.md for the full development plan. Key upcoming milestones:
PostgreSQL + PostGIS spatial queries in production
Full GeoJSON boundary coverage for all entities
Wikidata/OpenStreetMap ingestion pipelines
Premium API tier with higher rate limits
Hosted instance with public access
How to Cite
If you use AtlasPI in academic work, teaching, or derivative datasets, please cite it. A machine-readable CITATION.cff is provided in the repository root and is recognized by GitHub, Zenodo, Zotero, and most reference managers.
Suggested citation (software)
Ramadani, C. (2026). AtlasPI: A structured historical geographic database for AI agents (Version 6.1.2) [Software]. CRA. https://doi.org/10.5281/zenodo.19581784
BibTeX
@software{ramadani_atlaspi_2026,
author = {Ramadani, Clirim},
title = {AtlasPI: A structured historical geographic database for AI agents},
version = {6.1.2},
year = {2026},
publisher = {CRA},
doi = {10.5281/zenodo.19581784},
url = {https://doi.org/10.5281/zenodo.19581784},
note = {Live instance: https://atlaspi.it. Concept DOI (all versions): 10.5281/zenodo.19581784. Version v6.1.2 DOI: 10.5281/zenodo.19581785.}
}Citing the underlying boundary sources
AtlasPI derives its geographic boundaries from two upstream datasets. If your work depends on spatial precision, please also cite them directly:
Natural Earth (public domain) — post-1800 modern administrative boundaries. https://www.naturalearthdata.com/
aourednik/historical-basemaps (CC BY 4.0) — pre-1800 historical world timestamps. Ourednik, A. historical-basemaps. https://github.com/aourednik/historical-basemaps
For full methodology on how boundaries are assigned, matched, and confidence-scored, see docs/METHODOLOGY.md.
The dataset has a permanent DOI minted by Zenodo: 10.5281/zenodo.19581784 (concept DOI, always resolves to the latest version). Every tagged release mints a new version DOI; see the Zenodo record for v6.1.2 specifically. Deposition metadata is in .zenodo.json.
License
AtlasPI follows an open core model.
The core project -- API, data models, ethical framework, and documentation -- is released under the Apache License 2.0.
Imported datasets retain their original licenses. Every source is tracked and attributed. Premium components (hosted services, curated datasets, enterprise features) are maintained separately from the open source core.
See LICENSE for the full Apache License 2.0 text and NOTICE for third-party attributions.
Acknowledgments
AtlasPI builds on the work of:
Natural Earth -- public domain vector map data for modern boundaries
aourednik/historical-basemaps -- historical world boundary data
OpenStreetMap -- geographic data under ODbL
Wikidata -- structured knowledge base under CC0
And the countless historians, cartographers, and researchers whose work makes structured historical geography possible.
Available Tools
32 toolscompare_entitiesA
Confronta due entita' storiche dato il loro id numerico. Ritorna un report strutturato con sovrapposizione temporale, differenze di estensione territoriale, diversita' di status, capitali e fonti. Utile per domande comparative tipo 'paragona Roma Repubblicana e Impero Bizantino' o 'che differenze ci sono tra il Sacro Romano Impero e l'Impero Carolingio?'.
| Name | Required | Description | Default |
|---|---|---|---|
| id1 | Yes | ID della prima entita'. | |
| id2 | Yes | ID della seconda entita'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the tool returns a structured report with certain fields, but does not discuss potential errors, required permissions, or any side effects. The agent would need to assume it is safe, but lacks explicit reassurance.
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 efficiently cover action, output, and use cases. The first sentence states the core function, and the second provides examples. No extraneous information, though it could be slightly more concise by removing the redundant 'dato il loro id numerico'.
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 comparison tool with no output schema, the description outlines the return structure (temporal overlap, territorial differences, etc.). However, it omits details like output format (JSON?), handling of invalid IDs, or entity type restrictions. It is adequate but not fully explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both required parameters (id1, id2). The description adds no additional detail beyond stating they are numeric IDs. Thus, it neither improves nor detracts from the schema, earning the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it compares two historical entities by ID and returns a structured report with specific aspects like temporal overlap and territorial differences. Examples of comparative questions further clarify purpose. It distinguishes from siblings like get_entity (single entity) and what_changed_between (change over time).
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 'Utile per domande comparative' and gives examples, guiding when to use. It does not explicitly exclude cases or mention alternatives, but the context is sufficiently clear for an AI agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_statsA
Restituisce statistiche aggregate del dataset AtlasPI: numero totale di entita', breakdown per tipo, distribuzione per status (confirmed / uncertain / disputed), distribuzione per continente, intervallo temporale coperto (year_range), confidence_score medio, numero totale di fonti citate e di cambi territoriali. Utile come tool di scoperta iniziale per capire la copertura del dataset prima di formulare query specifiche.
| 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 does not mention behavioral traits like read-only nature, performance implications, or rate limits. It focuses on output content but omits side-effect disclosure. A 3 is appropriate because the tool is simple and likely safe, but transparency could be improved.
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?
Single paragraph, front-loaded with the most important information (what it returns). Every sentence serves a purpose, no fluff. Very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately lists the returned statistics. However, it does not specify if the stats are for the entire dataset or include any implicit filtering. For a zero-param discovery tool, it is mostly complete but could note response format or caching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds value by explaining the output structure (list of statistics) beyond the empty schema. Baseline for zero params is 4, and the description meets that.
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 aggregate statistics for the AtlasPI dataset, listing specific metrics (total entities, breakdown by type/status/continent, time range, etc.). It distinguishes its role as a discovery tool before specific queries, setting it apart from sibling tools that focus on specific entities or events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Utile come tool di scoperta iniziale per capire la copertura del dataset prima di formulare query specifiche', indicating when to use it. Missing explicit when-not-to-use or alternatives, but the context makes it clear this is a high-level overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_predecessorsA
Restituisce le catene in cui l'entità data ha un predecessore (sequence_order > 0), insieme al predecessore immediato, transition_year, transition_type, is_violent e ethical_notes della transizione CHE HA PORTATO A questa entità. Usa per domande tipo 'che entità ha preceduto la Repubblica di Turchia?' (→ Ottoman Empire, transition 1923 REVOLUTION).
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. It discloses the exact fields returned and the focus on the transition leading to the entity. Does not mention side effects or permissions, but as a read operation 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 with no wasted words. First sentence defines output fields, second provides a practical example. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description explains what is returned and gives a usage example. Lacks discussion of edge cases (e.g., no predecessor), but overall informative and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (entity_id) with numeric type. Description adds meaning by indicating it refers to a historical entity (e.g., 'Repubblica di Turchia'). Schema coverage is 0% but the implicit context helps. Does not explicitly document parameter meaning, 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?
Description clearly states the tool returns predecessor chains with specific fields (immediate predecessor, transition_year, transition_type, is_violent, ethical_notes). Provides a concrete query example, distinguishing it from sibling tool 'entity_successors'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage example given: 'che entità ha preceduto la Repubblica di Turchia?'. No explicit when-not-to-use or alternative tools, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_successorsA
Restituisce le catene in cui l'entità data ha un successore, insieme al successore immediato, transition_year, transition_type, is_violent e ethical_notes della transizione CHE HA PORTATO DA questa entità all'entità successiva. Usa per domande tipo 'cosa è venuto dopo Tawantinsuyu?' (→ Viceroyalty of Peru, transition 1542 CONQUEST).
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
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 the returned fields (successor, transition details) but does not mention side effects, auth needs, or pagination. The disclosure is adequate but not exhaustive.
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: the first gives the full functionality, the second provides an example. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter input and lack of output schema, the description covers the core functionality well. It lacks details about the return structure, but the example mitigates this. Overall complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'entity_id' is not described in the description beyond the example. With 0% schema coverage, the description should explain the parameter's meaning, but it relies on implicit understanding. The example helps somewhat but is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Restituisce le catene in cui l'entità data ha un successore' (returns successor chains with details), clearly identifying the verb and resource. It distinguishes from sibling 'entity_predecessors' by focusing on successors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example 'cosa è venuto dopo Tawantinsuyu?' and implies when to use this tool. It does not explicitly state when not to use, but the sibling list provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_periodsB
Ritorna le epoche storiche in cui è avvenuto un evento specifico. Es. event_id=123 (Battle of Tours, 732) → [Early Middle Ages (europe), Islamic Golden Age (near_east)].
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | ||
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavior. It implies a read-only operation and gives an output example, but does not discuss side effects, authentication, or errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with one sentence and an example. It is appropriately front-loaded, though slightly lean on detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters, the description provides a clear example but omits explanation of the optional 'region' parameter and lacks details on error handling or output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain the 'region' parameter. The 'event_id' parameter is only implied via the example, without explicit documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns historical epochs for a specific event, with a concrete example. However, it does not differentiate from sibling tools like list_historical_periods.
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 on when to use this tool versus alternatives. It does not mention prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_date_coverageA
Restituisce le date (MM-DD) che hanno almeno un evento nel dataset. Usa PRIMA di on_this_day per sapere se una data restituirà risultati, oppure per suggerire date 'interessanti' all'utente (es. 'In quali giorni dell'anno ci sono più eventi storici?'). La risposta include unique_dates (quante date uniche), coverage_pct (% dell'anno coperta), e la lista completa dates con mm_dd + event_count. Non richiede parametri — è un metadato del dataset.
| 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 full burden. It discloses the tool is read-only, returns metadata fields (unique_dates, coverage_pct, dates list), and requires no parameters. Could mention performance, but 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?
Concise and well-structured, with front-loaded purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely handles zero-parameter, no-output-schema tool. Description explains return fields and usage context thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters defined; description adds meaning by noting the tool requires no parameters and serves as dataset metadata. Baseline 4 for zero parameters is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns dates (MM-DD) with events in the dataset, using a specific verb and resource. It distinguishes itself from sibling tools like on_this_day and dataset_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using it before on_this_day to check if a date has results, and to suggest interesting dates. Provides concrete use cases and context for when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_for_entityA
Restituisce tutti gli eventi storici in cui una data entità compare (fondazione, conquiste, eventi subiti, dissoluzione). Filtro opzionale su role (MAIN_ACTOR, VICTIM, ecc.). Usa questo tool dopo get_entity/search_entities per ricostruire la storia eventuale di una specifica entità (es. 'quali eventi ha subito l'Impero Ottomano?'). Distingue tra ruoli attivi (conquiste operate) e subiti (conquiste ricevute, genocidi, colonizzazioni).
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Ruolo dell'entità nell'evento. Esempi: MAIN_ACTOR, VICTIM, PARTICIPANT, AFFECTED, WITNESS, FOUNDED, DISSOLVED. | |
| entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool returns all events for an entity, explains role semantics (active vs suffered), but does not explicitly state that it is a read-only operation (though implied). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states core purpose, second provides usage guidance and role distinction. Every sentence is necessary and informative. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description does not specify return format, but the content is well-explained. It addresses the primary use case and differentiates from many sibling tools. Slight gap on pagination or limits, but not critical.
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?
Two parameters: entity_id (integer, required) and role (optional string). Schema description coverage is 50% (role has description). The description adds value by explaining the role parameter with examples and the active/suffered distinction. entity_id remains basic but clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns all historical events where an entity appears, with an optional role filter. It uses a specific verb ('Restituisce') and resource ('eventi storici per entità'), and distinguishes from siblings like get_event (single event) and search_events (general search) by focusing on entity-specific history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using the tool after get_entity/search_entities and provides a concrete example question. Distinguishes between active and passive roles, guiding appropriate query formulation. Missing explicit 'when not to use', but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_for_mapA
Recupera gli eventi storici geolocalizzati attorno a un dato anno, ottimizzato per la visualizzazione su mappa. Restituisce un payload leggero (10 campi per evento) con solo eventi che hanno coordinate. La finestra temporale si auto-espande per epoche antiche: ±50 anni per anni < -1000 a.C., ±25 per il periodo classico, ±10 per l'età moderna. Usa questo tool quando l'utente chiede 'cosa è successo vicino a [luogo] nel [anno]?' o per popolare una visualizzazione mappa con eventi. Non include description/sources — usa get_event per i dettagli di un singolo evento.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. | |
| limit | No | Numero massimo di eventi (default: 200). | |
| window | No | Semi-ampiezza della finestra temporale in anni (default: 10, auto-espansa per epoche antiche). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: returns only events with coordinates, lightweight payload (10 fields), auto-expanding time window based on epoch, and no descriptions/sources. Without annotations, this carries full burden and meets it fully.
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 efficient, with each sentence adding specific information. It is not overly verbose, though it could be slightly more concise. Still, it earns a high score for clarity and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return payload (10 fields per event) and what is omitted. It covers all necessary contextual details for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds value by explaining auto-expansion logic for the window parameter and why events without coordinates are excluded, providing context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves geolocalized historical events optimized for map display, with specifics like lightweight payload (10 fields per event) and auto-expanding window. It distinguishes itself from siblings by focusing on map visualization and coordinate-only events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool: when user asks about events near a place in a year or to populate a map. Also states what it doesn't include (descriptions/sources) and directs to get_event for details, offering clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedback_statsA
Counters aggregati sul feedback: totale, by_status, by_category, by_submitter_type, last_24h, last_7d. Utile per capire l'attivita' della community e identificare le categorie piu' calde.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, or rate limits. For a stats tool, it likely reads data, but this is not stated. The description lacks transparency beyond its purpose.
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, concise and front-loaded with the key information: the specific counters and their utility. Every word earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is adequate for a simple stats tool. However, it lacks details on return format (e.g., a single object or array) and any behavior notes. Some gaps remain, but the core purpose is clear.
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 no parameters (100% coverage), and the description adds meaning by listing the types of counts returned (total, by_status, etc.), which effectively describes the output. This goes beyond the empty 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 provides aggregated counters on feedback, listing specific breakdowns (total, by_status, etc.) and its utility for understanding community activity. It distinguishes itself from sibling tools like list_feedback (individual items) and submit_feedback.
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 indicates the tool is useful for understanding community activity and identifying hot categories, which implies usage for aggregate analysis. However, it does not explicitly state when not to use it or compare to alternatives like list_feedback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_entitiesA
Trova entita' storiche simili a quella specificata, ordinate per punteggio di similarita' (0.0-1.0). Il punteggio considera: tipo di entita' (35%), sovrapposizione temporale (30%), durata simile (15%), confidence simile (10%), stesso status (10%). Usa questo tool quando l'utente chiede 'quali imperi erano simili a Roma?' o 'trova stati paragonabili al Sacro Romano Impero' o 'suggerisci paralleli storici per l'Impero Mongolo'. Il risultato include id, nome, tipo, periodo e punteggio per ogni entita' simile.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Numero massimo di risultati. | |
| entity_id | Yes | ID dell'entita' di riferimento. | |
| min_score | No | Punteggio minimo di similarita'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the weighted scoring formula and specifies that the result includes id, name, type, period, and score. This is transparent for a similarity search tool, though it omits details like pagination or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that starts with the core purpose, then details the scoring, and ends with examples. It is well-structured and information-dense, though slightly verbose (4 sentences) and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by listing the output fields (id, nome, tipo, periodo, punteggio). The parameter coverage is complete, and the scoring algorithm is explained. No critical information appears missing for a similarity search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has a schema description. The tool description adds context by reiterating the score range (0.0-1.0) and noting the output includes the score, but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds similar historical entities and orders them by a similarity score (0.0-1.0). It breaks down the scoring weights (35% entity type, 30% temporal overlap, etc.) and gives example queries like 'quali imperi erano simili a Roma?' which differentiate it from sibling tools such as compare_entities or fuzzy_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides three example usage scenarios (e.g., 'trova stati paragonabili al Sacro Romano Impero'), making it clear when to invoke this tool. It does not explicitly state when not to use it, but the examples serve as sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
full_timeline_for_entityA
Restituisce la timeline unificata di un'entità: eventi storici (via EventEntityLink), cambi territoriali e transizioni di catene successorie (predecessori + successori) in un unico stream ordinato cronologicamente. Ogni voce ha un campo discriminatore 'kind' fra 'event', 'territory_change' e 'chain_transition'. Usa questo tool invece di chiamare get_evolution + events_for_entity + entity_predecessors + entity_successors separatamente quando l'utente chiede la storia completa di un'entità (es. 'raccontami tutta la storia dell'Impero Romano d'Oriente'). Ritorna counts per ogni kind piu' lo stream unificato.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ID dell'entità di cui ricostruire la timeline completa. | |
| include_entity_links | No | Se true (default), include nei risultati i link EventEntityLink per ogni evento (ruolo dell'entità: MAIN_ACTOR, VICTIM, ecc.). Se false, ritorna solo i metadati base degli eventi. |
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 describes the output structure (stream with 'kind' discriminator, counts per kind) and the optional inclusion of event links. It does not mention side effects, but as a read-only retrieval tool, that is acceptable. A lower score would require missing critical behavioral info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main purpose, and every sentence adds value. It is concise with no wasted words or redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 2 parameters and no output schema, the description explains the output structure (kind field, counts, unified stream) which is sufficient for basic understanding. It could mention potential data limits or performance, but the coverage is adequate for typical use.
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% (both parameters have descriptions). The tool description adds context about the unified output but does not enhance parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a unified timeline for an entity, specifying the three types of events (event, territory_change, chain_transition) and explicitly differentiating from sibling tools like get_evolution and events_for_entity. The verb 'restituisce' (returns) is specific and the resource is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('instead of calling get_evolution + events_for_entity + entity_predecessors + entity_successors separately') and provides an example query ('raccontami tutta la storia dell'Impero Romano d'Oriente'). This gives clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fuzzy_searchA
Ricerca approssimata (fuzzy) sui nomi delle entità storiche — tollera errori di spelling, trascrizioni diverse e script differenti. Usa difflib.SequenceMatcher a livello di caratteri Unicode, quindi funziona anche cross-script (latino, cirillico, arabo, cinese, devanagari, ecc.). Esempio: q='safavid' trova 'دولت صفویه' (script arabo), q='Constantinople' trova 'Κωνσταντινούπολις' (script greco). Preferisci questo tool quando search_entities non trova risultati per via di translitterazione non standard o spelling approssimativo.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Query di ricerca. Può essere in qualsiasi script; l'algoritmo confronta char-by-char quindi è robusto anche a omissioni e refusi. | |
| limit | No | Numero massimo di risultati (default: 20). | |
| min_score | No | Soglia minima di similarità (0.0-1.0, default 0.4). Valori bassi (<0.4) producono match rumorosi; valori alti (>0.7) richiedono match quasi esatti. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses algorithm (difflib.SequenceMatcher), cross-script capability, and threshold behavior via min_score. Does not mention sorting or performance, but search tool traits are clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose first, then technical details, then usage guidance. Every sentence adds value. No redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description doesn't specify return format (assumes entities with scores). Lacks mention of ordering or pagination. Minor gap for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining algorithm, query flexibility, and threshold interpretation. Fewer param examples needed, but overall meaningful beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs fuzzy search on historical entity names, tolerating spelling errors and cross-script matching. Examples (safavid, Constantinople) illustrate purpose. It distinguishes from search_entities explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to prefer this tool: when search_entities fails due to non-standard transliteration or approximate spelling. No explicit when-not, but the context implies exact matches go elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chainA
Dettaglio di una catena successoria con tutti i link in ordine cronologico. Ogni link ha sequence_order, entità di riferimento, transition_year, transition_type (ETHICS-002: esplicito, no eufemismi), is_violent, description e ethical_notes specifiche per la singola transizione. Usa dopo search_chains.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only details output fields (transition_type with ethics note, is_violent) but omits read-only nature, error behavior, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: one describing output, one giving usage. Front-loaded with purpose; no wasted words, though could potentially be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers output structure and usage hint but lacks error handling, pagination info, or response format for large chains. Adequate but with noticeable 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?
Single parameter chain_id with basic schema (integer, minimum 1) but 0% schema description coverage; description adds no input meaning or context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns details of a succession chain with chronological links, specifying fields. 'Usa dopo search_chains' differentiates from sibling search 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?
Explicitly directs to use after search_chains, providing clear context and ordering among siblings. However, no mention of when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cityA
Dettaglio di una città storica: nome originale, varianti linguistiche e storiche (ETHICS-009: rename coloniali/imperiali documentati — es. Konstantinoupolis → Istanbul, Königsberg → Kaliningrad, Tenochtitlan → Ciudad de México, Calcutta → Kolkata), coordinate, tipo, population_peak, fonti, entità politica corrente. Usa dopo search_cities per approfondire.
| Name | Required | Description | Default |
|---|---|---|---|
| city_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses ethical renaming behavior (ETHICS-009) and lists returned fields. With no annotations, description carries the burden, and it does so adequately by explaining the output structure and special behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: first sentence details output fields, second gives usage context. Slightly long first sentence but still concise overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides a good overview of the return structure and usage context. Missing error handling but adequate for a simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, and the description does not explain the city_id parameter beyond what the schema provides (integer, minimum 1). The description focuses on output rather than input semantics.
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 details of a historical city, listing specific fields like name, linguistic variants, coordinates, etc., and explicitly says to use after search_cities, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Usa dopo search_cities per approfondire' (use after search_cities for details), providing clear when-to-use context. No when-not-to guidance, but the context is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventA
Dettaglio completo di un evento storico dato il suo id: tipo, anno, descrizione, entità coinvolte con ruolo esplicito (MAIN_ACTOR, VICTIM, PARTICIPANT, AFFECTED, WITNESS, FOUNDED, DISSOLVED), fonti con page/confidence, ethical_notes. ETHICS-007: il main_actor è sempre presente — la voce attiva ('chi ha fatto cosa a chi') è obbligatoria per eventi di violenza.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details returned fields and includes an ethical guideline (ETHICS-007), though it omits error handling or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with key information and remains concise. The ethical note is valuable but slightly extends length without being verbose.
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 simple tool (1 param, no output schema), the description adequately details output fields and ethical notes. Missing error handling info but minimal impact for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; the description only mentions 'dato il suo id' without adding meaning beyond the schema. No examples or format details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full details of a historical event by its ID, listing specific fields. This distinguishes it from sibling tools like search_events or on_this_day.
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 usage for fetching a single event by ID but does not explicitly state when to use it versus alternatives or provide any exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evolutionA
Restituisce la timeline dei cambi territoriali di una entita': annessioni, perdite di territorio, cambi di capitale, transizioni di regime, eventi di scissione o unificazione. Ogni evento ha anno, descrizione, fonte e (quando disponibile) acquisition_method per documentare se un territorio fu acquisito per conquista, matrimonio dinastico, trattato, ecc. Importante per ricostruire l'arco storico di un'entita' nel tempo.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ID dell'entita' di cui ricostruire l'evoluzione. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It details output fields and event types, but does not mention ordering, pagination, data freshness, or whether all events are included. Some behavioral traits are left unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the main purpose. It is reasonably concise and covers key aspects without unnecessary text.
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 simple schema and no output schema, the description provides details about return fields and event types, which is valuable. It conveys the tool's purpose and output structure, making it mostly complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with entity_id described in the schema. The description adds no extra information about the parameter itself, only about the output. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a timeline of territorial changes (verb+resource) and lists specific event types (annexations, losses, etc.) and output fields (year, description, source, acquisition_method). This distinguishes it from siblings like get_event or full_timeline_for_entity.
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 explains what the tool does and mentions it is important for reconstructing historical arcs, but does not explicitly state when to use it versus alternatives like entity_predecessors or full_timeline_for_entity. Usage context is implied but not definitive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_periodA
Dettaglio completo di un periodo storico dato il suo ID numerico. Include description, historiographic_note (controversie accademiche), alternative_names (es. 'Dark Ages' per 'Early Middle Ages') e sources bibliografiche.
| Name | Required | Description | Default |
|---|---|---|---|
| period_id | Yes | ID numerico del periodo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lists returned fields but lacks disclosure on side effects, idempotency, or rate limits. Acceptable for a read operation but minimal.
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?
Single sentence enclosing key fields; concise and front-loaded, though slightly wordy with example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main return fields for a simple lookup tool; no output schema but description compensates. Could mention error handling for invalid IDs.
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 100% with parameter description 'ID numerico del periodo.' The tool description adds no extra semantic value beyond stating it's a numeric ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a full detail of a historical period by numeric ID, distinguishing it from siblings like 'list_historical_periods' and 'get_historical_period_by_slug'.
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?
Implied usage through listing included fields (description, historiographic note, alternative names, sources), but no explicit when-to-use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_period_by_slugA
Dettaglio di un periodo dato lo slug URL-friendly (es. 'bronze-age', 'edo-period', 'islamic-golden-age'). Più leggibile di get_historical_period quando l'ID non è noto.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug URL-friendly (lowercase, hyphens). Esempi: 'bronze-age', 'hellenistic-period', 'cold-war'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose safety, authentication, or error behavior. Only implies read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with a comparative note, no wasted words. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter; schema and description are sufficient for selection. Missing output schema but return value is implied.
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 covers slug with pattern and length; description adds examples but little extra meaning. Schema coverage is 100%, baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves detail of a historical period by slug, and distinguishes it from get_historical_period when ID is not known.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when slug is known but ID is not, and directly compares with sibling tool get_historical_period.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routeC
Dettaglio di una rotta commerciale: nome originale, tipo geografico, intervallo temporale, waypoints (città attraversate in ordine) con coordinate, commodities principali, flag involves_slavery, geometry_geojson per visualizzazione, ethical_notes dettagliate. ETHICS-010: le rotte della tratta atlantica documentano le stime di Middle Passage (~1.8M morti su 12.5M embarcati).
| Name | Required | Description | Default |
|---|---|---|---|
| route_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies read-only behavior ('dettaglio') and discloses sensitive content (ethical notes about slave trade). However, it does not explicitly state that the tool is non-destructive or require authentication, leaving some gaps for a new user.
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 compact single sentence listing key output fields. It is front-loaded with the core purpose. The inclusion of a specific ethical note adds value without excessive length, though it could be streamlined.
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 there is no output schema, the description serves as the sole documentation of return fields. It covers most vital elements, but omits input explanation and does not describe pagination or response format. For a simple get-by-ID tool, it is adequate but has 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 has one required parameter (route_id) with no description. The tool description adds no information about this parameter; it only describes the output. With 0% schema coverage and no parameter explanation, this dimension is severely lacking.
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 details of a commercial route, listing specific fields like waypoints with coordinates, commodities, and ethical notes. It distinguishes from siblings like search_routes or get_chain by focusing on a single route's full detail, but it does not explicitly mention the input parameter, which slightly reduces clarity.
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 on when to use this tool versus alternatives such as search_routes (for finding routes) or get_chain (for chain details). The description does not include when/why to use it, leaving the agent to infer from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedbackA
Lista i feedback gia' sottomessi da altri agenti/umani. Utile per cross-validation: prima di sottomettere un nuovo feedback, controlla se qualcuno ha gia' segnalato lo stesso problema.
Filtra per status (pending, accepted, rejected, ...), category, entity_id, o submitter_type. Trasparenza pubblica.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 50). | |
| offset | No | Pagination offset. | |
| status | No | Filtra per status (default: tutti). | |
| category | No | Categoria del feedback. 'incorrect_data' per valori sbagliati di un campo; 'missing_source' per chiedere di aggiungere una citation; 'bias_report' per rappresentazioni biasate (ETHICS); 'boundary_dispute' per polygon imprecisi; 'missing_entity' per entita' che dovrebbe esserci ma non c'e'; 'translation_error' per nomi/varianti errati; 'ethics_concern' per violazioni ETHICS-001-010; 'other' per tutto il resto. | |
| entity_id | No | Filtra per entity_id. | |
| submitter_type | No | Tipo di submitter. Per agenti AI come Claude, GPT, Gemini, ecc. usa 'ai_agent' e fornisci submitter_id con il nome del modello. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions 'public transparency' but does not disclose behavioral details like pagination behavior, rate limits, or what fields each feedback item contains. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states function, second gives use case. No fluff, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter read tool with no output schema, the description is adequate but lacks detail on return format. It covers the purpose and filtering well but is incomplete about what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description repeats filtering categories already in schema but does not add new semantics beyond saying it's for cross-validation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists existing feedback from other agents/humans for cross-validation. It distinguishes itself from sibling tools like submit_feedback and feedback_stats by focusing on reading existing feedback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using this tool before submitting new feedback to check for duplicates ('cross-validation'). Also lists filtering options (status, category, entity_id, submitter_type) providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_historical_periodsA
Lista epoche storiche strutturate (Bronze Age, Classical Antiquity, Edo Period, Cold War, ecc.). Ogni periodo ha scope regionale esplicito (es. 'Middle Ages' è europeo, non globale) e confidence_score. Filtrabile per region, period_type (age/era/period/dynasty/epoch), anno (ritorna periodi che includono quell'anno), status. USA per: inquadrare un anno o entità nel contesto storico, rispondere a domande tipo 'In che epoca era il 1200 in Europa?', 'Quali periodi esistono in Giappone?'. ETHICS: le periodizzazioni sono costrutti storiografici; il campo historiographic_note documenta controversie accademiche.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Ritorna solo periodi che includono questo anno. | |
| limit | No | ||
| offset | No | ||
| region | No | Filtra per regione: global, europe, asia_east, asia_south, near_east, africa, americas, oceania. | |
| status | No | ||
| period_type | No | Tipo di periodo. 'age' = età preistoriche (Bronze, Iron), 'era' = periodi lunghi (Classical Antiquity), 'period' = periodi specifici (Hellenistic, Heian), 'dynasty' = basato su governance (Ottoman Classical), 'epoch' = scientifico. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key traits: each period has explicit regional scope (e.g., 'Middle Ages' is European, not global), confidence_score, and historiographic_note for controversies. No annotations provided, so the description carries the full burden; it covers safety and ethics well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the main purpose. It includes filtering, usage examples, and ethical notes without redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions return fields (regional scope, confidence_score, historiographic_note) but does not fully enumerate all fields. The tool has 6 parameters and no output schema, so more detail on return structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 3 of 6 parameters (year, region, period_type) are described in the schema. The description adds meaning for these (e.g., year returns periods including that year, region lists allowed values, period_type explains each enum) but does not address limit, offset, or status. Schema coverage is 50%, so the description partially compensates but not fully.
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 lists structured historical periods with examples (Bronze Age, Classical Antiquity) and features like regional scope, confidence score, and filtering. It distinguishes from siblings like get_historical_period by focusing on listing multiple periods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage scenarios are given: 'inquadrare un anno o entità nel contesto storico' with example questions. It explains filtering options but does not explicitly contrast with alternative tools like get_historical_period or event_periods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearest_historical_cityA
Trova le città storiche più vicine a una coppia di coordinate (latitudine, longitudine), opzionalmente filtrate per anno di attività e tipo (CAPITAL, TRADE_HUB, ecc.). Calcola la distanza haversine client-side e ordina per distanza crescente. Usa per domande tipo 'che città c'erano vicino a 41.9, 12.5 nel 100 d.C.?' (città vicino Roma) o 'qual è il trade hub più vicino a Venezia nel 1400?'. Nota: questo tool trova CITTÀ storiche (dataset separato da GeoEntity) — per capitali di imperi/regni usa nearby_entities.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitudine in gradi decimali (WGS84). | |
| lon | Yes | Longitudine in gradi decimali (WGS84). | |
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Filtra città attive (year_founded <= anno <= year_abandoned). | |
| limit | No | Numero massimo di città da ritornare (default: 5). | |
| city_type | No | CAPITAL / TRADE_HUB / RELIGIOUS_CENTER / FORTRESS / PORT / ACADEMIC_CENTER / INDUSTRIAL_CENTER / MULTI_PURPOSE / OTHER. | |
| max_candidates | No | Numero massimo di candidati da scaricare prima del sort client-side (default: 500). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses key behaviors: haversine distance calculation, client-side sorting, year filtering based on founded/abandoned dates, and use of a separate dataset. However, it does not describe the output structure (e.g., fields returned) or error handling, which would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the core purpose. Every sentence adds value: core function, examples, and sibling differentiation. No waste.
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 and no annotations, the description covers the tool's purpose, usage, and key behaviors. It lacks details on the exact return format (e.g., what fields are in each city object) but is sufficient for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds context such as 'client-side sort' for max_candidates and example values. This provides more meaning than the schema alone, justifying a score above baseline.
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 finds nearest historical cities to coordinates, with optional filters. It distinguishes from the sibling tool 'nearby_entities' by specifying that this tool is for historical cities, not capitals of empires/kingdoms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit example queries and states when to use this tool vs. 'nearby_entities'. It also explains the filtering by year and city type, giving clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
on_this_dayA
Restituisce gli eventi storici avvenuti in una specifica data del calendario (mese e giorno), attraverso tutti gli anni nel dataset. Formato: MM-DD (es. '07-04' per il 4 luglio, '10-12' per il 12 ottobre). Utile per curiosità storiche, efemeridi, quiz, contenuti 'accadde oggi'. Esempio: on_this_day('10-12') potrebbe restituire lo sbarco di Colombo (1492) e il giorno della scoperta del Nuovo Mondo.
| Name | Required | Description | Default |
|---|---|---|---|
| mm_dd | Yes | Data nel formato MM-DD (es. '12-25' per Natale, '07-14' per il 14 luglio). Il mese è 01-12, il giorno 01-31. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool retrieves events across all years for a given date, and gives an example output. It does not mention potential side effects, auth needs, or response structure, but the behavior is adequately conveyed for a simple query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each serving a purpose: stating the function, specifying format, and giving usage examples. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter input and no output schema, the description is complete. It explains what the tool does, the input format, and a concrete example, covering all necessary information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, which already provides format and pattern. The description adds value by providing example values ('07-04', '10-12') and explaining the context of its use, going beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns historical events for a specific date (month-day). It uses specific verb 'restituisce' and resource 'eventi storici', and distinguishes from sibling tools like search_events or get_event by its date-based scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: for historical curiosities, ephemerides, quizzes, and 'accadde oggi' content. It does not explicitly state when not to use or mention alternatives, but the single-purpose nature makes it straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_entityA
Restituisce una entita' storica casuale, opzionalmente filtrata per tipo, anno, continente o status. Pensato per esplorazione, suggerimenti, generazione di curiosita' storiche o per permettere all'agente di proporre 'lo sapevi che...' contestuali. Esempio: random_entity(type='khanate', continent='Asia') ritorna un khanato asiatico a caso.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Tipo di entita' geopolitica. Esempi: empire, kingdom, republic, city-state, sultanate, caliphate, khanate, dynasty, principality, confederation, federation, duchy, colony, disputed_territory, city. | |
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. | |
| status | No | Livello di certezza storica del record. 'disputed' indica voci con confidence_score basso o controverse fra storici. | |
| continent | No | Continente o macro-regione. Valori comuni: Europe, Asia, Africa, Americas, Middle East, Oceania. |
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 accurately describes the tool as returning a random entity and hints at optional filtering. The behavior is straightforward and unlikely to have side effects, so the description is sufficiently 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 concise, front-loaded with the main action, and includes an example in a single paragraph. Every sentence contributes 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 simplicity and the absence of an output schema, the description covers the essentials: what it does, when to use it, and an example. It could be considered complete for a random retrieval tool, though it does not detail return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema itself documents parameters well. The description adds value by providing a concrete example (type='khanate', continent='Asia') and contextualizes usage, which compensates for any lack of additional detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a random historical entity with optional filters by type, year, continent, or status. It provides specific use cases like exploration, suggestions, and generating curiosity, distinguishing it from sibling tools that are deterministic or focused on specific queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions when to use the tool (exploration, suggestions, contextual trivia) and provides an example. However, it does not explicitly state when not to use it or list alternative tools, though the random nature inherently differentiates it from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_chainsC
Cerca catene successorie/dinastiche/coloniali con filtri su chain_type (DYNASTY / SUCCESSION / RESTORATION / COLONIAL / IDEOLOGICAL / OTHER), region, year (almeno un'entità della catena attiva in quell'anno), status. ETHICS-002: ogni link ha transition_type esplicito (CONQUEST / REVOLUTION / REFORM / SUCCESSION / DECOLONIZATION / PARTITION / UNIFICATION / DISSOLUTION / ANNEXATION) — non esiste 'succession' generico che maschera violenze. ETHICS-003: chain_type=IDEOLOGICAL (es. Sacrum Imperium Romanum → Deutsches Kaiserreich → Deutsches Reich) porta avvertimento che la continuità self-proclaimed non implica legittimità.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Almeno un'entità della catena attiva in quell'anno. | |
| limit | No | ||
| offset | No | ||
| region | No | Substring case-insensitive sulla regione (es. 'Mediterranean', 'East Asia'). | |
| status | No | Livello di certezza storica del record. 'disputed' indica voci con confidence_score basso o controverse fra storici. | |
| chain_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds ethical context about transition types and IDEOLOGICAL warnings but fails to disclose read-only nature, auth requirements, rate limits, or side effects. The tool is likely read-only but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is moderately concise. It front-loads the main purpose and includes relevant ethical notes. Could be slightly more structured but not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no required params, and no output schema, the description lacks return format, pagination behavior, and usage context. It is incomplete for an agent to correctly invoke the tool without additional 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 50%. The description mentions chain_type, region, year, status filters but does not explain limit/offset. The ethical note on chain_type adds some value, but overall the description does not fully compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a search for succession/dynastic/colonial chains with specific filters. It distinguishes the resource 'chains' from sibling tools like 'search_events' and 'search_cities', though it does not explicitly differentiate from 'get_chain' or 'entity_predecessors'.
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 lists filters but provides no guidance on when to use this tool versus alternatives such as 'entity_predecessors' or 'entity_successors'. No when-to-use or when-not-to-use information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_citiesB
Cerca città storiche con filtri su anno di attività, tipo funzionale (CAPITAL, TRADE_HUB, RELIGIOUS_CENTER, FORTRESS, PORT, ACADEMIC_CENTER, INDUSTRIAL_CENTER, MULTI_PURPOSE), entità politica di appartenenza, bbox geografica. Una città è separata dalla capital_* di GeoEntity perché può sopravvivere più entità politiche (es. Costantinopoli/Istanbul attraversa Bizantino → Ottomano → Repubblica di Turchia).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box geografica. Formato CSV: min_lon,min_lat,max_lon,max_lat | |
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Città attiva in quell'anno. | |
| limit | No | ||
| offset | No | ||
| status | No | Livello di certezza storica del record. 'disputed' indica voci con confidence_score basso o controverse fra storici. | |
| city_type | No | CAPITAL / TRADE_HUB / RELIGIOUS_CENTER / FORTRESS / PORT / ACADEMIC_CENTER / INDUSTRIAL_CENTER / MULTI_PURPOSE / OTHER. | |
| entity_id | No | ID dell'entità politica di appartenenza. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains that cities can survive multiple political entities, but lacks disclosure of auth needs, rate limits, default behavior (e.g., no parameters), or performance. The tool appears to be a read-only search, but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of three sentences, front-loaded with the main action and filters. It is efficient with no obvious redundancy, though a slightly more structured format could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters and no output schema or annotations, the description covers main filters but omits return value details, pagination behavior, and default search scope. Adequate but not fully comprehensive.
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 71% (high), so baseline is 3. The description lists filter types ('anno di attività', 'tipo funzionale', etc.) which map directly to schema properties. It adds no significant meaning beyond schema descriptions, except the contextual note about political entities, which is not parameter-specific.
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 searches historical cities with specific filters (year, functional type, political entity, bbox). It explains the distinction from capital_* entities, but does not explicitly differentiate from sibling search tools like 'fuzzy_search'.
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 usage via listing filters but provides no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsA
Cerca eventi storici con filtri su anno, tipo, status e silenzio documentato. ETHICS-007: i tipi usano termini espliciti — GENOCIDE, COLONIAL_VIOLENCE, ETHNIC_CLEANSING, MASSACRE, DEPORTATION — senza eufemismi. Per domande tipo 'quali genocidi sono registrati nel XX secolo?' (event_type='GENOCIDE', year_min=1900, year_max=2000). ETHICS-008: known_silence=true filtra eventi storicamente insabbiati (es. genocidio armeno nella storiografia turca).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Numero massimo di risultati (default: 50). | |
| offset | No | ||
| status | No | Livello di certezza storica del record. 'disputed' indica voci con confidence_score basso o controverse fra storici. | |
| year_max | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Limite superiore (incluso). | |
| year_min | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Limite inferiore (incluso). | |
| event_type | No | Tipo di evento (EventType). Esempi: BATTLE, SIEGE, TREATY, REBELLION, REVOLUTION, CONQUEST, COLONIAL_VIOLENCE, GENOCIDE, ETHNIC_CLEANSING, MASSACRE, DEPORTATION, FAMINE, EPIDEMIC, EARTHQUAKE, VOLCANIC_ERUPTION, TSUNAMI, FLOOD, DROUGHT, FIRE, EXPLORATION, TRADE_AGREEMENT, RELIGIOUS_EVENT, INTELLECTUAL_EVENT, TECHNOLOGICAL_EVENT. | |
| known_silence | No | ETHICS-008: true = solo eventi con documentazione contemporanea insabbiata/cancellata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry full behavioral burden. It discloses ethical constraints (ETHICS-007, ETHICS-008) and the purpose of known_silence. However, it does not mention pagination behavior (limit/offset), result ordering, error handling, or whether the tool is read-only (implied but not stated).
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 three sentences, each serving a distinct purpose: core functionality, ethical constraint, and example usage. No redundant phrases, front-loaded with the main purpose. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no output schema, and 32 siblings, the description covers the main filtering dimensions and ethical considerations. However, it omits details about return format, pagination specifics, and how to best combine filters for complex queries. This leaves some gaps 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?
Schema coverage is 86%, high enough that the baseline is 3. The description adds value with the example query and the ETHICS-008 explanation for known_silence, but it does not fully compensate for the missing schema descriptions of approximately 14% of parameters. The added context is moderate but not transformative.
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 searches historical events with filters on year, type, status, and documented silence. It uses a specific verb ('cerca') and identifies the resource ('eventi storici'). While it doesn't explicitly differentiate from all 32 sibling tools, the filter-based search purpose is distinct enough from single-event lookup (get_event) or relationship-focused 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?
The description provides a concrete example query ('quali genocidi sono registrati nel XX secolo?') and explains the known_silence filter's historical context. It implies usage for filtered historical searches but does not explicitly state when to avoid this tool (e.g., for entity-specific events, use events_for_entity) or mention any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_routesA
Cerca rotte commerciali storiche con filtri su anno di attività, tipo geografico (LAND, SEA, RIVER, CARAVAN, MIXED) e involves_slavery. ETHICS-010: involves_slavery=true restituisce le rotte che trafficavano esseri umani schiavizzati come merce primaria (Trans-Atlantic, Trans-Saharan Slave, Indian Ocean Slave Route). Il flag è esplicito perché la distinzione è eticamente rilevante. Nota: 'Silk Road' è attribuzione 1877 di Richthofen, non un'auto-designazione delle carovane storiche.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Rotta attiva in quell'anno. | |
| limit | No | ||
| offset | No | ||
| status | No | Livello di certezza storica del record. 'disputed' indica voci con confidence_score basso o controverse fra storici. | |
| route_type | No | LAND=terrestre ordinaria; CARAVAN=carovane con caravanserragli; SEA=marittima; RIVER=fluviale; MIXED=intermodale. | |
| involves_slavery | No | ETHICS-010: true = rotte che trafficavano esseri umani schiavizzati come merce primaria. |
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 adds ethical context for the involves_slavery parameter and a historical note about 'Silk Road'. However, it does not discuss authentication, rate limits, or side effects.
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 relatively concise but packs in key information: filter capabilities, ethical flag, and a historical caveat. It is front-loaded and avoids verbosity.
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 does not explain return values or result structure. For a search tool with 6 parameters, it covers the main search dimensions but leaves the response format unspecified.
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 67% (4 of 6 parameters described). The description adds value by clarifying the ethical implications of involves_slavery and distinguishing route_type values (e.g., CARAVAN vs LAND). This goes beyond the schema notes.
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 searches historical trade routes with specific filters (year, route_type, involves_slavery). It distinguishes itself from sibling tools like get_route (single route) or search_events by focusing on trade routes.
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 usage for searching routes with given criteria, but it does not explicitly state when to use this tool versus alternatives like get_route or what not to use it for. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_at_yearA
Restituisce uno snapshot del mondo in un dato anno: tutte le entita' geopolitiche attive in quell'anno (year_start <= anno <= year_end), con possibilita' di filtrare per tipo o continente. Usa questo tool per domande del tipo 'che mappa politica c'era nel 300 a.C.?' o 'quali regni esistevano in Africa nel 1500?'. Ricorda: gli anni negativi sono a.C.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Tipo di entita' geopolitica. Esempi: empire, kingdom, republic, city-state, sultanate, caliphate, khanate, dynasty, principality, confederation, federation, duchy, colony, disputed_territory, city. | |
| year | Yes | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. | |
| continent | No | Continente o macro-regione. Valori comuni: Europe, Asia, Africa, Americas, Middle East, Oceania. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It explains the year range logic and negative years for BC, but lacks details on result limits, ordering, or potential performance constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a reminder are efficient and front-loaded with purpose. However, the reminder could be integrated or made more natural.
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?
Adequate for a filtered-listing tool with 3 parameters and no output schema. Provides core functionality but omits details like pagination, result format, or error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining that entities are filtered by year_start≤year≤year_end and giving examples for type parameter. It mentions continent macro-regions, though not a complete list.
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 a world snapshot for a given year, listing all geopolitical entities active that year, with optional type and continent filters. This distinguishes it from sibling tools like get_route or where_was.
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 examples (e.g., 'che mappa politica c'era nel 300 a.C.?') and clarifies when to use. However, it does not mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_feedbackA
Sottometti un feedback strutturato sul database AtlasPI: correzioni di dati, citazioni mancanti, polygon imprecisi, bias report, ecc. Usa questo tool quando hai informazioni VERIFICATE che contraddicono i dati attuali, oppure quando vuoi suggerire una fonte accademica non ancora presente.
Il feedback non modifica direttamente i dati: va in stato 'pending' e richiede review umana per contenuti storici (vedi ETHICS).
Quando usarlo:
Trovi una data sbagliata supportata da una fonte (es. year_end di una dinastia)
Vuoi aggiungere una citation accademica a un'entita'
Noti un bias di rappresentazione (es. nome coloniale come primario)
Identifichi un'entita' storica mancante dal database
Best practice: fornisci sempre 'citation' (la fonte) e 'reasoning' (1-3 frasi che spiegano perche').
| Name | Required | Description | Default |
|---|---|---|---|
| city_id | No | ID della citta' storica target del feedback. | |
| category | Yes | Categoria del feedback. 'incorrect_data' per valori sbagliati di un campo; 'missing_source' per chiedere di aggiungere una citation; 'bias_report' per rappresentazioni biasate (ETHICS); 'boundary_dispute' per polygon imprecisi; 'missing_entity' per entita' che dovrebbe esserci ma non c'e'; 'translation_error' per nomi/varianti errati; 'ethics_concern' per violazioni ETHICS-001-010; 'other' per tutto il resto. | |
| citation | No | Riferimento bibliografico a supporto della correzione (es. 'Holt 1970, p. 142; ISBN 978-0-19-821648-1'). | |
| event_id | No | ID dell'evento storico target del feedback. | |
| entity_id | No | ID dell'entita' (geo_entities) target del feedback. Obbligatorio per categoria incorrect_data, missing_source, boundary_dispute, translation_error, ethics_concern (almeno uno tra entity/event/city). | |
| reasoning | No | Spiegazione breve (1-3 frasi) della correzione e del perche' la fonte e' affidabile. | |
| confidence | No | Self-reported confidence (0.0-1.0) sulla correzione. Usa <0.5 se hai dubbi, >0.8 se hai fonte primaria diretta. | |
| field_name | No | Campo specifico (es. 'year_end', 'boundary_geojson', 'name_original', 'acquisition_method'). Opzionale. | |
| submitter_id | No | Identificativo del submitter. Per agenti AI: nome modello (es. 'claude-sonnet-4.7', 'gpt-5'). Per umani: email o handle pubblico. | |
| current_value | No | Valore attuale del campo (snapshot). Aiuta la review a verificare la correttezza della segnalazione. | |
| submitter_type | Yes | Tipo di submitter. Per agenti AI come Claude, GPT, Gemini, ecc. usa 'ai_agent' e fornisci submitter_id con il nome del modello. | |
| suggested_value | No | Valore corretto proposto. |
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 transparency. It explicitly states that the tool does not modify data directly, that feedback goes into a 'pending' state, and that human review is required for historical content (ETHICS). It also specifies conventions for submitter identification (e.g., model name for AI agents). This provides comprehensive insight into the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It front-loads the purpose, then lists usage scenarios, and ends with best practices. Every sentence serves a purpose, and there is no redundancy. The structure makes it easy for an AI agent to quickly grasp when and how to use the 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?
Given the tool's complexity (12 parameters, 2 required) and the absence of an output schema and annotations, the description provides a thorough explanation of the feedback process, categories, required fields, and best practices. It covers the submission workflow and expectations. However, it does not specify what response the user receives after submission (e.g., feedback ID), which would be beneficial for completeness. Overall, it is sufficient but slightly lacking in this area.
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 baseline is 3. The description adds value beyond the schema by explaining the categories and providing best practices, such as always including citation and reasoning. However, it does not provide further detail on individual parameters beyond what is already in the schema. The addition of context for submitters (e.g., 'for AI agents: provide model name') justifies a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: submitting structured feedback on the AtlasPI database, including data corrections, missing citations, imprecise polygons, bias reports, and missing entities. It uses the verb 'Sottometti' (submit) and specifies the resource, effectively distinguishing it from sibling read/query tools like list_feedback and feedback_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit scenarios for using the tool: finding a wrong date with a source, adding an academic citation, noticing bias, identifying a missing entity. It also offers best practices, such as always providing a citation and reasoning. Although it doesn't explicitly state when not to use it, the context implies it should be used only with verified information. The description also clarifies that feedback does not modify data directly and enters a pending state requiring human review.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_changed_betweenA
Diff macro-storico del mondo tra due anni: ritorna le entità apparse fra year1 e year2, quelle scomparse, e gli id di quelle persistenti. Opzionalmente filtra per tipo o continente. Usa per domande tipo 'cosa è cambiato nel Mediterraneo tra il 300 a.C. e il 100 d.C.?' o 'quali imperi sono apparsi tra il 1800 e il 1900 in Africa?'. È composizione client-side di due snapshot — più economico di due chiamate separate se servono solo id+nomi.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Tipo di entita' geopolitica. Esempi: empire, kingdom, republic, city-state, sultanate, caliphate, khanate, dynasty, principality, confederation, federation, duchy, colony, disputed_territory, city. | |
| year1 | Yes | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. | |
| year2 | Yes | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. | |
| continent | No | Continente o macro-regione. Valori comuni: Europe, Asia, Africa, Americas, Middle East, Oceania. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions it's a client-side composition of two snapshots and that it's cheaper when only IDs and names are needed, but doesn't detail rate limits, permissions, or exact output structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise—3-4 sentences—all sentences are informative: purpose, examples, efficiency note. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains what is returned (appeared/disappeared entities, persistent IDs) and optional filters. It could be more precise about the response shape but covers the main aspects.
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 baseline is 3. The description adds context about optional filters and usage examples but does not provide significant new details beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes a diff between two years, returning entities that appeared, disappeared, and persistent IDs. It explicitly distinguishes from a sibling tool (snapshot_at_year) by noting it's a client-side composition cheaper than two snapshot calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete example queries and notes when the tool is more economical than calling two snapshots. It lacks explicit 'when not to use' guidance but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
where_wasA
v6.34: reverse-geocoding temporale. Dato un punto geografico (lat, lon) e un anno, restituisce tutte le entita' storiche il cui boundary_geojson contiene quel punto in quell'anno. Primary use case: GENEALOGIA / DIASPORA ("Il mio bisnonno da Leopoli nel 1905 — sotto che stato era?"). Due modalita': (1) year-specific: entita' che controllavano il punto in un anno; (2) include_history=true: timeline completa di TUTTI gli imperi/ regni che hanno mai controllato quel punto, ordinati cronologicamente. Se il punto e' in territorio contestato (ETHICS-003), ritorna tutte le entita' che lo rivendicano con status='disputed', senza arbitrare la sovranita'. Usa per domande tipo 'chi comandava a Istanbul nel 1500?', 'che impero controllava Berlino nel 1945?', 'storia di Gerusalemme dal 1000 a.C. a oggi' (include_history=true).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitudine WGS84 in gradi decimali. | |
| lon | Yes | Longitudine WGS84 in gradi decimali. | |
| year | No | Anno (intero). Anni negativi rappresentano date a.C. Esempi: -300 = 300 a.C., 476 = 476 d.C. Richiesto se include_history=false. | |
| include_history | No | Se true, ritorna TUTTE le entita' che hanno mai controllato il punto (timeline cronologica). Se false (default), ritorna solo quelle attive nell'anno specificato. |
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 burden. It discloses behavior for disputed territories (returns all claimants with status='disputed') and explains the two modes. However, it does not specify return format, error handling, or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy, especially due to the Italian text, but it is structured with clear sections (version, purpose, modes, examples). Every sentence adds useful context, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description provides adequate context: use cases, two modes, handling of disputed territories. Missing details like return format and limitations, but overall sufficient for an AI agent to understand the tool's purpose and basic behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-defined. The description adds value by explaining the distinction between 'year' and 'include_history' modes, and provides examples of year values (e.g., -300 for 300 BC). This goes beyond the schema's formal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a reverse-geocoding temporal tool that returns historical entities controlling a given point in a given year. It provides specific examples of use cases (genealogy, diaspora) and differentiates itself from siblings by focusing on historical boundary querying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool with example queries like 'who ruled Istanbul in 1500?' and contrasts the two modes (year-specific vs include_history). However, it does not mention when to avoid using this tool or compare it directly with alternative sibling tools.
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. Dates show when Glama detected each change.
32 tool updates
v0.10.3- First observed
compare_entities - First observed
dataset_stats - First observed
entity_predecessors - First observed
entity_successors - First observed
event_periods - First observed
events_date_coverage - First observed
events_for_entity - First observed
events_for_map - First observed
feedback_stats - First observed
find_similar_entities - First observed
full_timeline_for_entity - First observed
fuzzy_search - First observed
get_chain - First observed
get_city - First observed
get_event - First observed
get_evolution - First observed
get_historical_period - First observed
get_historical_period_by_slug - First observed
get_route - First observed
list_feedback - First observed
list_historical_periods - First observed
nearest_historical_city - First observed
on_this_day - First observed
random_entity - First observed
search_chains - First observed
search_cities - First observed
search_events - First observed
search_routes - First observed
snapshot_at_year - First observed
submit_feedback - First observed
what_changed_between - First observed
where_was
TDQS
Every tool has a clearly distinct purpose. Tools covering similar domains (e.g., events) are split into search, detail, entity-specific, map-optimized, date-specific, and coverage metadata, each with unique functionality and inputs. No two tools serve the same role.
All 32 tools follow a consistent verb_noun pattern in snake_case, such as get_route, search_events, list_feedback. Naming is predictable and descriptive, making it easy to infer a tool's function from its name without ambiguity.
32 tools is slightly high but well justified by the comprehensive and multi-faceted domain (entities, events, cities, routes, chains, feedback). Each tool serves a specific need, and the set covers exploration, search, detail, comparison, and metadata operations without unnecessary redundancy.
The tool surface is remarkably complete for a historical atlas: CRUD-like operations for entities, events, cities, routes, and chains are present, along with specialized tools for timeline, comparison, fuzzy search, feedback, and dataset statistics. No obvious gaps for standard historical queries.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
Geopolitical grounding for AI agents: country risk, forecasts, chokepoints, sanctions. Free tier.
Self-hostable team wiki; agents read & write it via MCP; Atlas turns your repo into a cited wiki.
Related MCP Servers
- AlicenseAqualityAmaintenanceUnified MCP gateway for AI agents with 56+ tools and growing. Travel (Amadeus, Sabre GDS), e-commerce, local services, financial markets (Polymarket), and marketing APIs — all through a single endpoint. Pay-per-call via x402 micropayments in USDC.100510MIT
- AlicenseBqualityAmaintenanceAI-powered 3D globe control via Model Context Protocol. Connect any MCP-compatible AI agent to CesiumJS — camera, layers, entities, spatial analysis through 19 natural language tools.33134MIT

Magic Lane MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.8297Apache 2.0- AlicenseBqualityBmaintenanceProvides sovereign geospatial awareness by wrapping open, non-US-dependent geospatial APIs for AI-agent situational awareness, environmental compliance, and disaster response.5MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Soil911/AtlasPI'
If you have feedback or need assistance with the MCP directory API, please join our Discord server