NarcoScope — illicit-economy evidence atlas
Server Details
Read bounded illicit-economy evidence with provenance, privacy, availability, and federation intact.
- Status
- Healthy
- Uptime
- 99.9% over 81 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- beepboop2025/narcoscope
- GitHub Stars
- 1
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 14 tools
The set has several overlapping retrieval clusters: get_atlas, get_market_catalog, query_market_observations, and get_overview all return related market/observation data, while get_palimpsest_bri_context, get_palimpsest_bridge, and get_palimpsest_corridors are difficult to distinguish without close reading. Descriptions add boundary language, but an agent could still misselect among these similarly scoped evidence lanes.
Names are consistently snake_case and mostly follow get_noun for retrieval, with predictable clusters such as get_palimpsest_*. The use of list_, query_, and research_ verbs is a minor deviation but still semantically readable.
Fourteen tools is well within a reasonable range for a multi-lane evidence atlas with overview, catalog, query, research, newsroom, and context tools. Each tool appears to serve a distinct surface area, even where boundaries overlap.
For a read-only evidence atlas, the surface covers overview, detailed observations, market cataloging, entity designations, research context, newsroom stories, and capability discovery. Minor gaps include no obvious unified search across all evidence lanes, but core exploration workflows are supported.
Available Tools
14 toolsget_atlasQuery the illicit-economy atlasARead-onlyInspect
Return country-year organized-crime and firearms-tracing observations with source metadata, native caveats, explicit null fields, and stable cursor pagination. No records identify people or operational locations.
| Name | Required | Description | Default |
|---|---|---|---|
| iso3 | No | ||
| year | No | ||
| limit | No | ||
| cursor | No | ||
| domain | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| query | Yes | |
| schema | Yes | |
| status | Yes | |
| records | Yes | |
| sources | Yes | |
| limitations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds further behavioral context: output includes source metadata and native caveats, missing data is explicit null, pagination uses stable cursors, and records never identify people or operational locations. This goes beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the return scope and key output traits; the second adds a single high-value privacy constraint.
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 five-parameter read-only query with an output schema present, this description covers the resource scope, output traits, pagination, and privacy boundary, which is enough to invoke correctly. It omits alternative-tool routing, but that is already scored under usage guidelines and is not required to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps 'country-year' to iso3/year, names the two domain values, and implies cursor/limit via 'stable cursor pagination'. However, it does not explain limit bounds, cursor format, or the 'all' domain option, leaving the schema's patterns, defaults, and enums to carry much of the parameter-meaning burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb ('Return') and a precise resource: country-year organized-crime and firearms-tracing observations. It adds distinctive detail—source metadata, native caveats, explicit null fields, stable cursor pagination, and a privacy boundary—that separates it from siblings like get_entities or get_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool: when country-year organized-crime or firearms-tracing observations are needed. It also states an implicit when-not ('No records identify people or operational locations'), but does not name an alternative sibling tool or provide explicit routing conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connected_researchRead China and regional economic researchARead-onlyInspect
Return source-linked China economic findings, CPEC, Balochistan, BRI and Myanmar research questions, reporting metadata, and dated national indicators. Optional hash-bound observatory summaries add economic histories, EU-reported trade and official methodology cases. SAFE quantities remain private. Country and theme context only; gaps do not establish concealment, actor relationships or causality.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| schema | Yes | |
| sha256 | Yes | |
| source_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: 'SAFE quantities remain private' and 'Country and theme context only; gaps do not establish concealment, actor relationships or causality.' This goes beyond the annotations by clarifying what the tool will not reveal and how to interpret missing data. It also discloses the optional hash-bound summaries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three substantive sentences: the first lists core outputs, the second describes optional additions, and the third states privacy and interpretative safeguards. The content is front-loaded, dense, and every clause 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?
For a zero-parameter, read-only tool with an output schema, the description sufficiently covers what is returned, what remains private, and how to interpret gaps. It does not explain when to prefer this tool over sibling research tools, but the topic specificity and output schema carry most of the invocation burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with an empty schema and 100% schema description coverage, so the baseline is 4. The description mentions 'Optional hash-bound observatory summaries' without tying them to a parameter, but since the schema disallows additional properties this is not a parameter conflict; no parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Return' and names a concrete resource: source-linked China economic findings, CPEC, Balochistan, BRI and Myanmar research questions, reporting metadata, and dated national indicators. This is specific and conveys a clear read/research purpose, though it does not explicitly contrast with sibling tools such as get_palimpsest_bri_context, so some overlap ambiguity remains.
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 explicit when-to-use guidance is provided. The caveats about SAFE quantities and gaps describe interpretation limits, not selection criteria or alternatives. An agent would have to infer when this tool is appropriate based on the topic list, leaving usage to inference rather than direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entitiesQuery privacy-minimized OFAC designation identitiesARead-onlyInspect
Return approved public designation identity fields only. A designation is an administrative action, not an adjudication or proof of guilt; aliases, addresses, dates of birth, identity documents, and allegation text are withheld.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| cursor | No | ||
| country | No | ||
| program | No | ||
| entity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| error | Yes | |
| query | Yes | |
| schema | Yes | |
| source | Yes | |
| status | Yes | |
| privacy | Yes | |
| records | Yes | |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/destructive annotations, the description discloses that this is a limited data view ('approved public designation identity fields only') and explicitly lists withheld categories: aliases, addresses, dates of birth, identity documents, and allegation text. It also adds important context that a designation is not an adjudication or proof of guilt.
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 front-loaded sentences with no filler. The core behavior is stated first, and the withheld-field detail earns its place by setting expectations for the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover return format and safety, and the description clarifies data limitations. But with six undocumented parameters and no guidance on filtering or pagination, the definition is not fully complete for an agent deciding how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the six parameters. It does not: query, limit, cursor, country, program, and entity_type are all undocumented, and opaque enum values such as 'SDNTK' and 'ILLICIT-DRUGS-EO14059' are left unexplained.
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 starts with a specific verb and resource: 'Return approved public designation identity fields only.' It clearly identifies the domain (OFAC designation identities) and distinguishes the tool from siblings by subject matter, even without naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an implied use case: when an agent needs public OFAC designation identity fields rather than full records. However, the description does not explicitly state when to use this tool over siblings, nor does it mention exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_federationRead Seiche and Palimpsest as separate evidence lanesBRead-onlyInspect
Return bounded public money-market, capital-market, BRI, or publication-rights context without cross-lane scoring, composites, causal inference, or culpability inference. Upstream unavailability stays typed.
| Name | Required | Description | Default |
|---|---|---|---|
| lane | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| lanes | Yes | |
| query | Yes | |
| policy | Yes | |
| schema | Yes | |
| status | Yes | |
| limitations | Yes | |
| retrieved_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, closed-world), and the description adds real behavioral context beyond them: output is bounded, no cross-lane scoring or composites are produced, no causal/culpability inference is applied, and upstream failures stay 'typed' rather than being silently filled in. That is meaningful disclosure about what the caller will and won't receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the key constraint (no cross-lane scoring/composites) is front-loaded. The phrasing is dense and slightly jargon-heavy ('Upstream unavailability stays typed') but every clause carries 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?
An output schema exists, so return values needn't be described, and the annotations cover safety. What is missing is the lane parameter's meaning and the relationship to the many sibling read tools covering the same seiche/palimpsest domains, which is the main thing an agent needs before choosing this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the single 'lane' parameter or its seven enum values, so the only guidance comes from the enum identifiers themselves. For a tool whose whole purpose is lane selection, the description should explain what 'all' versus a specific lane returns.
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 verb 'Return' plus the domains (money-market, capital-market, BRI, publication-rights) gives a rough sense of the resource, and 'without cross-lane scoring' hints at the seiche/palimpsest lane split. But the object of the tool is described only as 'bounded context,' and no sibling (get_atlas, get_palimpsest_bri_context, get_market_catalog) is named or contrasted, so an agent cannot easily tell what this returns that the siblings do not.
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 states what the tool will NOT do (no composites, no causal or culpability inference) but gives no positive trigger for when to call it, and never mentions the sibling tools that cover the same domains. An agent must infer selection from the title alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_catalogDiscover granular global market evidenceARead-onlyInspect
Page drugs, arms and informal-economy indicators (page/limit, maximum 4), with native units, full coverage totals and licenses for sources on the page. Country/category/subgroup/selection lists have independent dimensionPagination; follow dimensionPage with the same dataset/indicator filters (dimensionLimit maximum 50). Retain dataset hashes across pages. Legacy atlas and prices remain distinct resources.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| dataset | No | ||
| indicator | No | ||
| dimensionPage | No | ||
| dimensionLimit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | Yes | |
| status | Yes | |
| filters | Yes | |
| datasets | Yes | |
| pagination | Yes | |
| generatedAt | Yes | |
| limitations | Yes | |
| relatedResources | Yes | |
| unavailableDatasets | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts beyond that: hard caps of 4 items per page and 50 per dimension page, the rule that hash retention is required across pages, and that dimension lists paginate independently of the record page.
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?
No filler sentences, but the structure leads with paging mechanics and a parenthetical rather than with what the tool returns, burying the purpose mid-sentence. Three dense jargon sentences ask a lot of a first-time reader on a catalog-discovery 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?
Output schema exists so return values needn't be described, and the paging contract is well covered. Still, for a 6-parameter tool with zero schema descriptions, an agent is left guessing how to obtain valid 'indicator' values, what the dataset enum members mean, and how to detect the end of a listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage the description must carry the parameters, and it does define page/limit (max 4), dimensionPage/dimensionLimit (max 50) and how they interact with the dataset/indicator filters. The 'indicator' free-text parameter and the two 'dataset' enum values are left undefined, which is the main remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource precisely as paginated 'drugs, arms and informal-economy indicators' and explicitly separates it from 'legacy atlas and prices' resources, which maps onto the get_atlas sibling. The retrieval verb is unusual ('Page ...') and the domain vocabulary is dense, but an agent can still tell what data comes back.
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?
Gives real conditional guidance for the pagination flow: use dimensionPage with the same dataset/indicator filters, respect dimensionLimit, and retain dataset hashes across pages. However, it never contrasts with the most relevant sibling, query_market_observations, and gives no explicit 'do not use this for X' exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsroomRead the evidence newsroomBRead-onlyInspect
List current deterministic analyses with citations, correction metadata, publication gates, and explicit evidence limits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| feeds | Yes | |
| title | Yes | |
| schema | Yes | |
| articles | Yes | |
| generated_at | Yes | |
| verification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful contextual detail about what the newsroom contains, such as citations, correction metadata, publication gates, and evidence limits, but it does not explain behaviors like ordering, pagination, or what 'publication gates' mean in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, then packs the relevant details into a compact list. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with one simple optional parameter, an output schema, and readOnly annotations, the description is fairly complete. It names the content domain and the key metadata categories. It could be stronger with sibling guidance, but that is already captured under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the 'limit' parameter. The schema itself provides type, default, min, and max constraints, but the description adds no semantic meaning about how the limit affects the returned list, so it does not compensate for the missing 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 uses a specific verb ('List') and a specific resource ('current deterministic analyses'), and enumerates the kinds of metadata returned. It is clear what the tool does, though it does not explicitly differentiate it from sibling tools like get_story or get_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus its siblings, nor any exclusions or conditions. The word 'current' implies a recency filter, but there is no actionable direction about choosing this over get_overview or get_palimpsest_bridge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overviewRead the official-data overviewARead-onlyInspect
Return bounded headline aggregates across official prices, seizures, overdose mortality, wastewater, and public designations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| schema | Yes | |
| headline | Yes | |
| divergences | Yes | |
| publication | Yes | |
| generated_at | Yes | |
| interpretation | Yes | |
| designation_programs | Yes | |
| overdose_by_substance | Yes | |
| top_seizure_countries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a safe, read-only, closed-world operation. The description adds useful behavioral context by saying the return is 'bounded headline aggregates,' indicating limited-size summary output rather than full raw records.
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?
It is a single front-loaded sentence with no filler. Every clause identifies the return type or the covered data domains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, rich annotations, and an output schema, the description supplies enough context to understand what the overview returns. The main remaining gap is the lack of explicit sibling routing, though that is primarily a usage-guidelines concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics for the description to explain. The baseline for this case is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Return) and resource (bounded headline aggregates) and names the covered data domains, so the tool’s purpose is clear. It does not explicitly contrast itself with sibling tools such as query_market_observations or get_market_catalog, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'headline aggregates' implies this is for summary-level overview data rather than detailed records, giving some usage context. However, there is no explicit when-to-use guidance or named alternative for detailed queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_palimpsest_bri_contextRead bounded Palimpsest Belt and Road contextARead-onlyInspect
Return pinned source readiness and national WDI coverage for CPEC, Gwadar, CMEC, Kyaukpyu, and Balochistan as a parallel context lane. Cross-lane drug, actor, route, guilt, political, project, causal, tactical, and navigable inference or use is prohibited.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| links | Yes | |
| schema | Yes | |
| interpretation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, but the description adds a meaningful behavioral boundary: it explicitly forbids cross-lane drug, actor, route, guilt, political, project, causal, tactical, and navigable inference or use. This is valuable context beyond the structured annotations, clarifying the tool's limited analytical scope.
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 filler. The main action is front-loaded, and the second sentence crisply adds the key restriction. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool with an output schema defined, the description fully covers purpose, scope, and the critical behavioral constraint. There is nothing an agent needs to know to invoke it correctly that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers the interface. Per the baseline for parameterless tools, a score of 4 is appropriate; no further parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'return' and the specific resource: pinned source readiness and national WDI coverage for CPEC, Gwadar, CMEC, Kyaukpyu, and Balochistan. It also frames this as a 'parallel context lane,' which distinguishes its scope from siblings like bridge or corridors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a negative guideline—prohibiting cross-lane inference—but never explicitly compares itself to sibling tools or states conditions for when to choose it over them. The usage context is implied but not directly spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_palimpsest_bridgeInspect China drug data coverageARead-onlyInspect
Inspect official China evidence coverage and source metadata. WDR prices and seizures are withheld pending publication permission; independently available precursor, designation and wildlife aggregates retain their provenance, disclosure and causal boundaries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| $schema | Yes | |
| dataAsOf | Yes | |
| datasets | Yes | |
| geography | Yes | |
| artifactId | Yes | |
| disclosure | Yes | |
| exclusions | Yes | |
| limitations | Yes | |
| canonicalUrl | Yes | |
| schemaVersion | Yes | |
| interpretation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, closed-world, non-destructive), so the description adds genuine value by disclosing partial data availability: WDR prices and seizures are withheld pending permission, while precursor, designation and wildlife aggregates retain provenance and disclosure boundaries. This tells the agent to expect gaps rather than assume missing data means zero.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose followed by the caveat. The second sentence is dense with jargon ('causal boundaries', 'designation aggregates') but every clause carries information about coverage limits.
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?
An output schema exists, so return format need not be described. For a no-argument inspection tool, the description supplies the key context (what is covered, what is suppressed and why). It could go further in stating how the aggregates relate to the other palimpsest endpoints.
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?
Zero parameters with an empty schema, so there is nothing for the description to disambiguate. Baseline of 4 applies; the description adds nothing here but nothing is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: inspect official China evidence coverage plus source metadata. Clear enough to know what the tool returns, but it never distinguishes itself from the similarly-named siblings (get_palimpsest_bri_context, get_palimpsest_corridors), and the tool name 'bridge' is opaque relative to the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the other palimpsest tools, and no stated prerequisites. The note about withheld WDR data is a caveat about results, not a selection rule for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_palimpsest_corridorsRead the Palimpsest corridor overlayBRead-onlyInspect
Inspect official China, Pakistan and Myanmar evidence coverage. WDR prices and seizures are metadata-only pending publication permission; other available aggregates retain provenance, missing-data and geography-and-time-only join rules.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| $schema | Yes | |
| dataAsOf | Yes | |
| datasets | Yes | |
| artifactId | Yes | |
| disclosure | Yes | |
| exclusions | Yes | |
| geographies | Yes | |
| limitations | Yes | |
| canonicalUrl | Yes | |
| schemaVersion | Yes | |
| interpretation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/closed-world/non-destructive), the description discloses genuinely non-obvious data availability behavior: WDR prices and seizures are metadata-only pending publication permission, while other aggregates retain provenance, missing-data, and join-rule semantics. That goes well past the safety profile the annotations already cover, though the phrasing is compressed enough that the exact effect on results is hard to pin down.
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?
At two sentences it is appropriately short and leads with scope, but the second sentence is a run-on of domain jargon ('provenance, missing-data and geography-and-time-only join rules') that resists parsing. Brevity here comes at the cost of comprehensibility rather than being purely 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?
An output schema exists, so return-value explanation is not required, and the description does cover coverage scope and data-permission caveats. However, the central concept ('corridors' / 'palimpsest overlay') stays undefined, leaving the agent without enough understanding of what it will receive or how this differs from adjacent palimpsest tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; the baseline of 4 applies. The description references geography-and-time join rules but does not imply any input the caller must supply.
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 verb 'inspect' plus 'official China, Pakistan and Myanmar evidence coverage' gives a rough scope, but the actual resource — a 'corridor overlay' — is never defined, so an agent cannot say what a corridor is or what data comes back. It also fails to distinguish itself from the closely named siblings get_palimpsest_bri_context and get_palimpsest_bridge, which are likely to be confused with it.
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 states no conditions for when to call this instead of get_palimpsest_bri_context, get_palimpsest_bridge, or get_entities, and gives no exclusions or prerequisites. An agent must guess at the routing decision purely from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storyRead a newsroom story artifactARead-onlyInspect
Fetch one story as metadata, a machine brief, or the cited dossier. Use the machine brief first for agent workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| artifact | No | machine-brief |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | Yes | |
| article | Yes | |
| content | Yes | |
| artifact | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered structurally. The description adds value by disclosing the three return formats, enriching the agent's expectation of the response, though it does not go into detail about what each artifact mode contains. This is adequate but not rich behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The primary action is front-loaded, and the usage tip is appended as the second sentence. Every word earns its place; no redundant phrasing or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only fetch tool with an output schema, this is largely complete: it names the resource, scope, artifact modes, and a recommended default. It does not elaborate on the semantic difference between the three artifact types or document the slug format, but these are minor gaps given the self-explanatory mode names and the presence of an output schema covering return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the 'artifact' parameter's enum by naming its three modes (metadata, machine brief, dossier), adding meaning beyond the bare enum values. However, the required 'slug' parameter has no semantic or example context in either the schema (which only shows a regex pattern) or the description, leaving a gap for the one required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (one story), and precisely defines the three artifact modes it returns: metadata, machine brief, or cited dossier. These artifact types clearly separate it from sibling tools like get_newsroom (fetches an entire newsroom), get_overview, and the get_palimpsest_* family, so an agent can distinguish it without opening schemas.
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?
Offers one genuine usage tip — 'Use the machine brief first for agent workflows' — which guides the default artifact choice. However, it gives no when-not-to-use guidance and does not reference alternative tools (e.g., when to call get_newsroom or get_overview instead). The guidance is artifact-level rather than tool-selection-level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_capabilitiesDiscover NarcoScopeARead-onlyInspect
List the evidence explorer, newsroom, API, feeds, MCP tools, audiences, and safety boundaries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| api | Yes | |
| mcp | Yes | |
| feeds | Yes | |
| schema | Yes | |
| product | Yes | |
| featured | Yes | |
| boundaries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by enumerating what the capability listing includes, especially 'safety boundaries,' which gives an agent a clearer picture of the tool's informational scope.
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, well-structured sentence that front-loads the verb and resource list. Every element earns its place, and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter discovery tool with an output schema and clear sibling context, the description is nearly complete. It could more explicitly frame itself as the capability discovery entry point, but nothing essential is missing for invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to clarify. The baseline of 4 applies, and the description adds useful context about what the no-argument call returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and names the exact scope: evidence explorer, newsroom, API, feeds, MCP tools, audiences, and safety boundaries. This clearly distinguishes it from the sibling get_* tools, which each retrieve a single specific resource.
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 and title imply this is a discovery/entry-point tool, but it never explicitly states when to use it versus the get_* siblings. There is no direct guidance like 'use this first to see what is available' or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_market_observationsQuery granular market observationsARead-onlyInspect
Filter published observations by dataset, indicator, geography, category, subgroup and inclusive reference period with bounded stable pagination (default 200, maximum 500). Retain dataset hashes across pages. Units, source locators, estimates and unavailable values remain explicit. No market-size aggregation, unit conversion or causal inference.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| geo | No | ||
| from | No | ||
| page | No | ||
| limit | No | ||
| dataset | No | ||
| category | No | ||
| subgroup | No | ||
| indicator | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | Yes | |
| status | Yes | |
| filters | Yes | |
| sources | Yes | |
| datasets | Yes | |
| indicators | Yes | |
| pagination | Yes | |
| generatedAt | Yes | |
| limitations | Yes | |
| publication | Yes | |
| observations | Yes | |
| unavailableDatasets | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint=false, so the description's real contribution is pagination behavior: bounded stable pagination, default/max limit, and retaining dataset hashes across pages. It also discloses the return posture (units, source locators, estimates, unavailable values stay explicit), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the filter surface and followed by pagination and scope limits; no filler. Slightly telegraphic phrasing ('Retain dataset hashes across pages') costs a little readability but nothing is wasted.
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?
Output schema already documents the returned shape, so the description need not explain return values, and annotations cover the safety profile. What remains — filterable dimensions, pagination bounds and stability, and explicit scope exclusions — is all present, which is sufficient for a 9-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 9 parameters, the description carries the burden and largely succeeds: it names dataset, indicator, geography/geo, category, subgroup and the reference period (from/to) as filters, and clarifies the period is inclusive — a genuine semantic addition the schema's regex does not convey. Pagination parameters are also given default 200 / max 500 and cross-page stability, leaving only minor gaps such as the dataset enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Filter') and resource ('published observations') plus the exact filter dimensions, which an agent can map onto the schema properties. It clearly separates itself from catalog/metadata siblings like get_market_catalog, though it names no sibling 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?
The negative constraints ('No market-size aggregation, unit conversion or causal inference') tell the agent what this tool will not answer, which is useful routing signal. However, there is no positive when-to-use guidance relative to get_market_catalog or the other siblings, so the agent must infer that this is the row-level data retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_networkConnect global evidence with funding and institution researchBRead-onlyInspect
Read Palimpsest’s complete source catalog by topic alongside Seiche funding context, with next steps into LiquiLens filings and Undertow liquidity. Source dates, rights and missingness stay attached; no actor, route, criminal or causal inference is implied.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | all | |
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | Yes | |
| status | Yes | |
| datasets | Yes | |
| selection | Yes | |
| eligibility | Yes | |
| context_only | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior, and the description goes beyond them by promising that source dates, rights, and missingness stay attached. It also explicitly states that no actor, route, criminal, or causal inference is implied, which is a valuable guardrail for interpreting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core operation clearly. The second sentence adds important provenance and inference caveats. It is dense with proprietary naming, but there is no filler or redundant material.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The read-only annotations and output schema cover safety and return-shape basics, and the description adds useful behavioral constraints. However, the phrase 'with next steps into LiquiLens filings and Undertow liquidity' is vague, and the description does not explain pagination parameters, leaving moderate gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the parameters, but it only references 'by topic' and says nothing about limit or offset. The enum values and pagination semantics are left entirely to the agent's inference from parameter names and schema constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation and resource: 'Read Palimpsest's complete source catalog by topic alongside Seiche funding context.' This makes the tool's function recognizable, but it does not explicitly distinguish itself from sibling tools like get_palimpsest_bridge or get_palimpsest_corridors, and the heavy use of product names creates some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a caller needs source catalog data combined with funding context, but it gives no explicit when-to-use or when-not-to-use guidance. No alternative tools are named, so an agent must infer selection from the many sibling get_* 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.
1 tool update
- Changed
get_federation1 field changed- changed
Output schema / properties / lanes / items / properties / transport / oneOfPrevious value: -[ - { - "type": "null" - }, - { - "additionalProperties": false, - "properties": { - "attempts": { - "const": 1 - }, - "max_response_bytes": { - "maximum": 2000000, - "minimum": 1, - "type": "integer" - }, - "timeout_ms": { - "maximum": 15000, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "attempts", - "timeout_ms", - "max_response_bytes" - ], - "type": "object" - } -]New value: +[ + { + "type": "null" + }, + { + "additionalProperties": false, + "properties": { + "attempts": { + "const": 1 + }, + "max_response_bytes": { + "maximum": 4194304, + "minimum": 1, + "type": "integer" + }, + "timeout_ms": { + "maximum": 15000, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "attempts", + "timeout_ms", + "max_response_bytes" + ], + "type": "object" + } +]
5 tool updates
- Changed
get_market_catalog35 fields changed- added
Output schema / properties / datasets / items / properties / coverage / properties / estimated / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / coverage / properties / estimated / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / coverage / properties / estimated / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / coverage / properties / numericObservations / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / coverage / properties / numericObservations / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / coverage / properties / numericObservations / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / coverage / properties / observations / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / coverage / properties / observations / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / coverage / properties / observations / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / coverage / properties / reported / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / coverage / properties / reported / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / coverage / properties / reported / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / coverage / properties / unavailable / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / coverage / properties / unavailable / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / coverage / properties / unavailable / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / estimated / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / estimated / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / estimated / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / numericObservations / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / numericObservations / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / numericObservations / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / observations / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / observations / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / observations / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / reported / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / reported / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / reported / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / unavailable / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / unavailable / minimumRemoved value: -0 - removed
Output schema / properties / datasets / items / properties / indicators / items / properties / coverage / properties / unavailable / typeRemoved value: -"integer" - added
Output schema / properties / datasets / items / properties / indicators / items / properties / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "status": { + "enum": [ + "published", + "partial", + "metadata_only" + ] + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "observationScope", + "reason" + ], + "type": "object" +} - changed
Output schema / properties / datasets / items / properties / indicators / items / requiredPrevious value: -[ - "id", - "sourceId", - "market", - "label", - "unit", - "measureType", - "description", - "limitations", - "featured", - "coverage", - "dimensions", - "dimensionPagination" -]New value: +[ + "id", + "sourceId", + "market", + "label", + "unit", + "measureType", + "description", + "limitations", + "publication", + "featured", + "coverage", + "dimensions", + "dimensionPagination" +] - added
Output schema / properties / datasets / items / properties / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "status": { + "enum": [ + "published", + "partial", + "metadata_only" + ] + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "observationScope", + "reason" + ], + "type": "object" +} - changed
Output schema / properties / datasets / items / requiredPrevious value: -[ - "id", - "title", - "sha256", - "generatedAt", - "sources", - "indicators", - "coverage", - "limitations", - "sourceCount", - "indicatorCount" -]New value: +[ + "id", + "title", + "sha256", + "generatedAt", + "publication", + "sources", + "indicators", + "coverage", + "limitations", + "sourceCount", + "indicatorCount" +] - changed
Output schema / properties / status / enumPrevious value: -[ - "available", - "partial", - "unavailable" -]New value: +[ + "available", + "partial", + "unavailable", + "metadata_only" +]
- Changed
get_overview2 fields changed- added
Output schema / properties / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "status": { + "enum": [ + "published", + "partial", + "metadata_only" + ] + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "observationScope", + "reason" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "schema", - "generated_at", - "note", - "headline", - "overdose_by_substance", - "top_seizure_countries", - "designation_programs", - "divergences", - "interpretation" -]New value: +[ + "schema", + "generated_at", + "note", + "publication", + "headline", + "overdose_by_substance", + "top_seizure_countries", + "designation_programs", + "divergences", + "interpretation" +]
- Changed
get_palimpsest_bridge5 fields changed- changed
Output schema / $defs / dataset / properties / data / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / $defs / dataset / properties / publicationAdded value: +{ + "$ref": "#/$defs/publication" +} - added
Output schema / $defs / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "status": { + "const": "metadata_only" + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "reason", + "observationScope" + ], + "type": "object" +} - changed
Output schema / properties / datasets / properties / drugSeizures / allOfPrevious value: -[ - { - "$ref": "#/$defs/dataset" - }, - { - "properties": { - "datasetId": { - "const": "drug_seizures" - } - }, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "drug_seizures" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "type": "null" + }, + "publication": { + "$ref": "#/$defs/publication" + } + }, + "required": [ + "publication" + ], + "type": "object" + } +] - changed
Output schema / properties / datasets / properties / retailDrugPrices / allOfPrevious value: -[ - { - "$ref": "#/$defs/dataset" - }, - { - "properties": { - "datasetId": { - "const": "retail_drug_prices" - } - }, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "retail_drug_prices" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "type": "null" + }, + "publication": { + "$ref": "#/$defs/publication" + } + }, + "required": [ + "publication" + ], + "type": "object" + } +]
- Changed
get_palimpsest_corridors5 fields changed- changed
Output schema / $defs / dataset / properties / data / typePrevious value: -"object"New value: +[ + "object", + "null" +] - added
Output schema / $defs / dataset / properties / publicationAdded value: +{ + "$ref": "#/$defs/publication" +} - added
Output schema / $defs / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "status": { + "const": "metadata_only" + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "reason", + "observationScope" + ], + "type": "object" +} - changed
Output schema / properties / datasets / properties / drugSeizures / allOfPrevious value: -[ - { - "$ref": "#/$defs/dataset" - }, - { - "properties": { - "datasetId": { - "const": "drug_seizures" - } - }, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "drug_seizures" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "type": "null" + }, + "publication": { + "$ref": "#/$defs/publication" + } + }, + "required": [ + "publication" + ], + "type": "object" + } +] - changed
Output schema / properties / datasets / properties / retailDrugPrices / allOfPrevious value: -[ - { - "$ref": "#/$defs/dataset" - }, - { - "properties": { - "datasetId": { - "const": "retail_drug_prices" - } - }, - "type": "object" - } -]New value: +[ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "retail_drug_prices" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "type": "null" + }, + "publication": { + "$ref": "#/$defs/publication" + } + }, + "required": [ + "publication" + ], + "type": "object" + } +]
- Changed
query_market_observations9 fields changed- added
Output schema / properties / pagination / properties / pages / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / pagination / properties / pages / minimumRemoved value: -0 - removed
Output schema / properties / pagination / properties / pages / typeRemoved value: -"integer" - added
Output schema / properties / pagination / properties / total / anyOfAdded value: +[ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / pagination / properties / total / minimumRemoved value: -0 - removed
Output schema / properties / pagination / properties / total / typeRemoved value: -"integer" - added
Output schema / properties / publicationAdded value: +{ + "additionalProperties": false, + "properties": { + "observationScope": { + "const": "published_rows_only" + }, + "permissionEvidence": { + "type": "null" + }, + "policyId": { + "const": "narcoscope.publication-rights.2026-10-28.v1" + }, + "reason": { + "minLength": 1, + "type": "string" + }, + "sourceIds": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "status": { + "enum": [ + "published", + "partial", + "metadata_only" + ] + } + }, + "required": [ + "policyId", + "status", + "sourceIds", + "permissionEvidence", + "observationScope", + "reason" + ], + "type": "object" +} - changed
Output schema / properties / status / enumPrevious value: -[ - "available", - "partial", - "unavailable" -]New value: +[ + "available", + "partial", + "unavailable", + "metadata_only" +] - changed
Output schema / requiredPrevious value: -[ - "schema", - "status", - "generatedAt", - "unavailableDatasets", - "limitations", - "filters", - "pagination", - "datasets", - "indicators", - "sources", - "observations" -]New value: +[ + "schema", + "status", + "generatedAt", + "unavailableDatasets", + "limitations", + "publication", + "filters", + "pagination", + "datasets", + "indicators", + "sources", + "observations" +]
1 tool update
- Changed
get_market_catalog16 fields changed- added
Input schema / propertiesAdded value: +{ + "dataset": { + "enum": [ + "global-drugs", + "global-arms-economy" + ], + "type": "string" + }, + "dimensionLimit": { + "default": 25, + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "dimensionPage": { + "default": 1, + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "indicator": { + "maxLength": 160, + "minLength": 1, + "type": "string" + }, + "limit": { + "default": 4, + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + "page": { + "default": 1, + "maximum": 1000000, + "minimum": 1, + "type": "integer" + } +} - added
Output schema / properties / datasets / items / properties / indicatorCountAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / datasets / items / properties / indicators / items / properties / dimensionPaginationAdded value: +{ + "additionalProperties": false, + "properties": { + "categories": { + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "nextPage": { + "anyOf": [ + { + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "page": { + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "pages": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "nextPage" + ], + "type": "object" + }, + "geographies": { + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "nextPage": { + "anyOf": [ + { + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "page": { + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "pages": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "nextPage" + ], + "type": "object" + }, + "selections": { + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "nextPage": { + "anyOf": [ + { + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "page": { + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "pages": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "nextPage" + ], + "type": "object" + }, + "subgroups": { + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "nextPage": { + "anyOf": [ + { + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "page": { + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "pages": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "nextPage" + ], + "type": "object" + } + }, + "required": [ + "geographies", + "categories", + "subgroups", + "selections" + ], + "type": "object" +} - changed
Output schema / properties / datasets / items / properties / indicators / items / properties / dimensions / properties / categories / maxItemsPrevious value: -500000New value: +50 - changed
Output schema / properties / datasets / items / properties / indicators / items / properties / dimensions / properties / geographies / maxItemsPrevious value: -500000New value: +50 - changed
Output schema / properties / datasets / items / properties / indicators / items / properties / dimensions / properties / selections / maxItemsPrevious value: -500000New value: +50 - changed
Output schema / properties / datasets / items / properties / indicators / items / properties / dimensions / properties / subgroups / maxItemsPrevious value: -500000New value: +50 - changed
Output schema / properties / datasets / items / properties / indicators / items / requiredPrevious value: -[ - "id", - "sourceId", - "market", - "label", - "unit", - "measureType", - "description", - "limitations", - "featured", - "coverage", - "dimensions" -]New value: +[ + "id", + "sourceId", + "market", + "label", + "unit", + "measureType", + "description", + "limitations", + "featured", + "coverage", + "dimensions", + "dimensionPagination" +] - changed
Output schema / properties / datasets / items / properties / indicators / maxItemsPrevious value: -500New value: +4 - added
Output schema / properties / datasets / items / properties / sourceCountAdded value: +{ + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / datasets / items / properties / sources / maxItemsPrevious value: -80New value: +4 - changed
Output schema / properties / datasets / items / requiredPrevious value: -[ - "id", - "title", - "sha256", - "generatedAt", - "sources", - "indicators", - "coverage", - "limitations" -]New value: +[ + "id", + "title", + "sha256", + "generatedAt", + "sources", + "indicators", + "coverage", + "limitations", + "sourceCount", + "indicatorCount" +] - added
Output schema / properties / filtersAdded value: +{ + "additionalProperties": false, + "properties": { + "dataset": { + "anyOf": [ + { + "enum": [ + "global-drugs", + "global-arms-economy" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "indicator": { + "anyOf": [ + { + "maxLength": 160, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "dataset", + "indicator" + ], + "type": "object" +} - added
Output schema / properties / paginationAdded value: +{ + "additionalProperties": false, + "properties": { + "limit": { + "maximum": 4, + "minimum": 1, + "type": "integer" + }, + "nextPage": { + "anyOf": [ + { + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "page": { + "maximum": 1000000, + "minimum": 1, + "type": "integer" + }, + "pages": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "nextPage" + ], + "type": "object" +} - changed
Output schema / properties / schema / constPrevious value: -"narcoscope.global-market-catalog.v1"New value: +"narcoscope.global-market-catalog-page.v1" - changed
Output schema / requiredPrevious value: -[ - "schema", - "status", - "generatedAt", - "unavailableDatasets", - "limitations", - "datasets", - "relatedResources" -]New value: +[ + "schema", + "status", + "generatedAt", + "unavailableDatasets", + "limitations", + "datasets", + "relatedResources", + "filters", + "pagination" +]
1 tool update
- Added
research_network
2 tool updates
- Added
get_market_catalog - Added
query_market_observations
1 tool update
- Changed
get_connected_research1 field changed- added
Output schema / properties / data / properties / observatoryAdded value: +{ + "additionalProperties": false, + "properties": { + "datasets": { + "items": { + "type": "object" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "findings": { + "items": { + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "generated_at": { + "type": "string" + }, + "input_sha256": { + "pattern": "^[0-9a-f]{64}$", + "type": "string" + }, + "methodology_cases": { + "items": { + "type": "object" + }, + "maxItems": 30, + "type": "array" + }, + "schema": { + "const": "palimpsest.china-evidence-observatory-summary.v1" + }, + "source_url": { + "const": "https://www.palimpsest.info/china/evidence/" + }, + "use_policy": { + "additionalProperties": false, + "properties": { + "actor_inference": { + "const": "prohibited" + }, + "concealment_inference": { + "const": "not_established_by_gaps_or_disagreement" + }, + "missing_values": { + "const": "unavailable_not_zero" + }, + "private_numeric_data": { + "const": "excluded" + } + }, + "required": [ + "concealment_inference", + "actor_inference", + "private_numeric_data", + "missing_values" + ], + "type": "object" + } + }, + "required": [ + "schema", + "generated_at", + "source_url", + "input_sha256", + "datasets", + "findings", + "methodology_cases", + "use_policy" + ], + "type": "object" +}
1 tool update
- Added
get_connected_research
3 tool updates
- Added
get_atlas - Added
get_entities - Added
get_federation
6 tool updates
- Changed
get_newsroom1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "articles": { + "items": { + "additionalProperties": false, + "properties": { + "automationDisclosure": { + "minLength": 1, + "type": "string" + }, + "contentClass": { + "minLength": 1, + "type": "string" + }, + "contentHash": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "correctionsStatus": { + "minLength": 1, + "type": "string" + }, + "dataAsOf": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "dek": { + "minLength": 1, + "type": "string" + }, + "dossierUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "htmlUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "humanReviewStatus": { + "minLength": 1, + "type": "string" + }, + "id": { + "minLength": 1, + "type": "string" + }, + "machineBriefUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "publishedAt": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "revisionHash": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "rightToReplyStatus": { + "minLength": 1, + "type": "string" + }, + "simulatedHumanVoicesIncluded": { + "type": "boolean" + }, + "slug": { + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "testimonyIncluded": { + "type": "boolean" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "slug", + "title", + "dek", + "contentClass", + "dataAsOf", + "publishedAt", + "updatedAt", + "htmlUrl", + "dossierUrl", + "machineBriefUrl", + "revisionHash", + "contentHash", + "automationDisclosure", + "humanReviewStatus", + "correctionsStatus", + "rightToReplyStatus", + "testimonyIncluded", + "simulatedHumanVoicesIncluded" + ], + "type": "object" + }, + "maxItems": 25, + "type": "array" + }, + "feeds": { + "additionalProperties": false, + "properties": { + "atom": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "json": { + "format": "uri", + "pattern": "^https://", + "type": "string" + } + }, + "required": [ + "json", + "atom" + ], + "type": "object" + }, + "generated_at": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "schema": { + "const": "narcoscope.api.newsroom.v1" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "verification": { + "additionalProperties": false, + "properties": { + "banned_claim_matches": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "citation_coverage": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + }, + "gates": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "pipeline_version": { + "type": [ + "string", + "null" + ] + }, + "source_inventory": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + }, + "visual_citation_coverage": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "pipeline_version", + "gates", + "citation_coverage", + "visual_citation_coverage", + "source_inventory", + "banned_claim_matches" + ], + "type": "object" + } + }, + "required": [ + "schema", + "generated_at", + "title", + "articles", + "feeds", + "verification" + ], + "type": "object" +}
- Changed
get_overview1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "designation_programs": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 1, + "type": "string" + }, + "count": { + "minimum": 0, + "type": "integer" + }, + "label": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "code", + "label", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "divergences": { + "items": { + "additionalProperties": false, + "properties": { + "demandLabel": { + "minLength": 1, + "type": "string" + }, + "demandPct": { + "type": "number" + }, + "label": { + "minLength": 1, + "type": "string" + }, + "reading": { + "minLength": 1, + "type": "string" + }, + "supplyLabel": { + "minLength": 1, + "type": "string" + }, + "supplyPct": { + "type": "number" + }, + "window": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "window", + "supplyLabel", + "supplyPct", + "demandLabel", + "demandPct", + "reading" + ], + "type": "object" + }, + "type": "array" + }, + "generated_at": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "headline": { + "additionalProperties": false, + "properties": { + "designations": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "seizureCountries": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "seizureYear": { + "minimum": 1900, + "type": [ + "integer", + "null" + ] + }, + "usOverdoseLatest": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "usOverdoseWindow": { + "type": [ + "string", + "null" + ] + }, + "usOverdoseYear": { + "minimum": 1900, + "type": [ + "integer", + "null" + ] + }, + "usOverdoseYoY": { + "type": [ + "number", + "null" + ] + }, + "wastewaterCities": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "worldSeizureTonnes": { + "minimum": 0, + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "usOverdoseLatest", + "usOverdoseYoY", + "usOverdoseYear", + "usOverdoseWindow", + "worldSeizureTonnes", + "seizureYear", + "designations", + "seizureCountries", + "wastewaterCities" + ], + "type": "object" + }, + "interpretation": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "overdose_by_substance": { + "items": { + "additionalProperties": false, + "properties": { + "deaths": { + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "label": { + "minLength": 1, + "type": "string" + }, + "substance": { + "minLength": 1, + "type": "string" + }, + "yoy": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "substance", + "label", + "deaths", + "yoy" + ], + "type": "object" + }, + "type": "array" + }, + "schema": { + "const": "narcoscope.api.overview.v1" + }, + "top_seizure_countries": { + "items": { + "additionalProperties": false, + "properties": { + "iso3": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "kg": { + "minimum": 0, + "type": "number" + }, + "name": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "iso3", + "name", + "kg" + ], + "type": "object" + }, + "maxItems": 10, + "type": "array" + } + }, + "required": [ + "schema", + "generated_at", + "note", + "headline", + "overdose_by_substance", + "top_seizure_countries", + "designation_programs", + "divergences", + "interpretation" + ], + "type": "object" +}
- Changed
get_palimpsest_bridge1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "dataset": { + "additionalProperties": false, + "properties": { + "data": { + "type": "object" + }, + "datasetId": { + "minLength": 1, + "type": "string" + }, + "limitations": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "measurement": { + "additionalProperties": false, + "properties": { + "grain": { + "minLength": 1, + "type": "string" + }, + "method": { + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "official_reported", + "official_action_record" + ] + }, + "unit": { + "minLength": 1, + "type": "string" + }, + "valueType": { + "enum": [ + "statistical_measurement", + "administrative_measurement", + "administrative_action" + ] + } + }, + "required": [ + "status", + "valueType", + "method", + "unit", + "grain" + ], + "type": "object" + }, + "provenance": { + "additionalProperties": false, + "properties": { + "documentSha256": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "input": { + "additionalProperties": false, + "properties": { + "path": { + "minLength": 1, + "type": "string" + }, + "sha256": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + } + }, + "required": [ + "path", + "sha256" + ], + "type": "object" + }, + "localDataDate": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "publisher": { + "minLength": 1, + "type": "string" + }, + "retrievedAt": { + "format": "date-time", + "type": "string" + }, + "sourceEdition": { + "minLength": 1, + "type": "string" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "publisher", + "title", + "url", + "sourceEdition", + "localDataDate", + "input" + ], + "type": "object" + }, + "sourceStatus": { + "const": "official" + }, + "temporalCoverage": { + "additionalProperties": false, + "properties": { + "fromYear": { + "type": [ + "integer", + "null" + ] + }, + "kind": { + "enum": [ + "year_range", + "snapshot" + ] + }, + "snapshotDate": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "toYear": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "kind", + "fromYear", + "toYear", + "snapshotDate" + ], + "type": "object" + }, + "topic": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "datasetId", + "topic", + "sourceStatus", + "measurement", + "temporalCoverage", + "provenance", + "data", + "limitations" + ], + "type": "object" + }, + "ofacDesignationData": { + "additionalProperties": false, + "properties": { + "byEntityType": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "minimum": 0, + "type": "integer" + }, + "entityType": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "entityType", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "byProgram": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "minimum": 0, + "type": "integer" + }, + "label": { + "minLength": 1, + "type": "string" + }, + "program": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "program", + "label", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "multiCountryRecordCount": { + "minimum": 0, + "type": "integer" + }, + "narcoticsSpecificProgramRecordCount": { + "minimum": 0, + "type": "integer" + }, + "recordCount": { + "minimum": 0, + "type": "integer" + }, + "tcoOnlyRecordCount": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "recordCount", + "narcoticsSpecificProgramRecordCount", + "tcoOnlyRecordCount", + "byEntityType", + "byProgram", + "multiCountryRecordCount" + ], + "type": "object" + }, + "precursorCorridorData": { + "additionalProperties": false, + "properties": { + "contextRecords": { + "items": { + "additionalProperties": false, + "properties": { + "allocationStatus": { + "const": "not_reported_by_origin_destination_pair" + }, + "contextId": { + "minLength": 1, + "type": "string" + }, + "countScope": { + "const": "four_reporting_countries_operation_total" + }, + "destinations": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "operationReportedSeizureCount": { + "minimum": 1, + "type": "integer" + }, + "origins": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "precursor": { + "minLength": 1, + "type": "string" + }, + "recordKind": { + "const": "qualitative_context" + }, + "sourceLocator": { + "$ref": "#/$defs/sourceLocator" + }, + "summary": { + "minLength": 1, + "type": "string" + }, + "year": { + "minimum": 1900, + "type": "integer" + } + }, + "required": [ + "contextId", + "precursor", + "origins", + "destinations", + "year", + "recordKind", + "allocationStatus", + "operationReportedSeizureCount", + "countScope", + "summary", + "sourceLocator" + ], + "type": "object" + }, + "type": "array" + }, + "corridors": { + "items": { + "additionalProperties": false, + "allOf": [ + { + "if": { + "properties": { + "aggregationEligibility": { + "const": "eligible" + } + }, + "required": [ + "aggregationEligibility" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationGroup": { + "type": "string" + }, + "quantityRelation": { + "const": "exact" + }, + "recordKind": { + "not": { + "const": "derived_subtotal" + } + } + }, + "type": "object" + } + }, + { + "else": { + "properties": { + "aggregationEligibility": { + "const": "ineligible_non_exact" + } + }, + "type": "object" + }, + "if": { + "properties": { + "quantityRelation": { + "const": "exact" + } + }, + "required": [ + "quantityRelation" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationEligibility": { + "not": { + "const": "ineligible_non_exact" + } + } + }, + "type": "object" + } + }, + { + "if": { + "properties": { + "recordKind": { + "const": "derived_subtotal" + } + }, + "required": [ + "recordKind" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationEligibility": { + "const": "ineligible_derived" + }, + "aggregationGroup": { + "const": null + } + }, + "type": "object" + } + }, + { + "if": { + "properties": { + "aggregationEligibility": { + "const": "ineligible_derived" + } + }, + "required": [ + "aggregationEligibility" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationGroup": { + "const": null + }, + "recordKind": { + "const": "derived_subtotal" + } + }, + "type": "object" + } + }, + { + "if": { + "properties": { + "aggregationEligibility": { + "const": "ineligible_incompatible_basis" + } + }, + "required": [ + "aggregationEligibility" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationGroup": { + "const": null + } + }, + "type": "object" + } + } + ], + "properties": { + "aggregationEligibility": { + "enum": [ + "eligible", + "ineligible_non_exact", + "ineligible_derived", + "ineligible_incompatible_basis" + ] + }, + "aggregationGroup": { + "oneOf": [ + { + "enum": [ + "mdma_precursor_substance_mass", + "meth_pre_precursor_substance_mass", + "pseudoephedrine_preparation_gross_mass", + "potassium_permanganate_substance_mass", + "pseudoephedrine_preparation_mass" + ] + }, + { + "type": "null" + } + ] + }, + "destination": { + "minLength": 1, + "type": "string" + }, + "incidentCount": { + "minimum": 1, + "type": [ + "integer", + "null" + ] + }, + "originAttribution": { + "enum": [ + "china_only", + "joint_origin_includes_china" + ] + }, + "precursor": { + "minLength": 1, + "type": "string" + }, + "quantityBasis": { + "minLength": 1, + "type": "string" + }, + "quantityKg": { + "minimum": 0, + "type": "number" + }, + "quantityRelation": { + "enum": [ + "exact", + "approx", + "less_than", + "greater_than" + ] + }, + "recordKind": { + "enum": [ + "single_incident", + "multi_incident_aggregate", + "annual_aggregate", + "derived_subtotal" + ] + }, + "reportedOrigin": { + "minLength": 1, + "type": "string" + }, + "seizureLocation": { + "minLength": 1, + "type": [ + "string", + "null" + ] + }, + "sourceLocator": { + "$ref": "#/$defs/sourceLocator" + }, + "transit": { + "minLength": 1, + "type": [ + "string", + "null" + ] + }, + "year": { + "minimum": 1900, + "type": "integer" + } + }, + "required": [ + "originAttribution", + "reportedOrigin", + "transit", + "destination", + "seizureLocation", + "year", + "precursor", + "quantityKg", + "quantityRelation", + "quantityBasis", + "recordKind", + "aggregationEligibility", + "aggregationGroup", + "incidentCount", + "sourceLocator" + ], + "type": "object" + }, + "type": "array" + }, + "includedContextRecordCount": { + "minimum": 0, + "type": "integer" + }, + "includedQuantitativeRecordCount": { + "minimum": 0, + "type": "integer" + }, + "quantityAggregation": { + "additionalProperties": false, + "allOf": [ + { + "else": { + "properties": { + "aggregationGroup": { + "const": null + }, + "summedQuantityKg": { + "const": null + } + }, + "type": "object" + }, + "if": { + "properties": { + "status": { + "const": "computed_exact_only" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "then": { + "properties": { + "aggregationGroup": { + "enum": [ + "mdma_precursor_substance_mass", + "meth_pre_precursor_substance_mass", + "pseudoephedrine_preparation_gross_mass", + "potassium_permanganate_substance_mass", + "pseudoephedrine_preparation_mass" + ] + }, + "eligibleRecordCount": { + "minimum": 1, + "type": "integer" + }, + "summedQuantityKg": { + "type": "number" + } + }, + "type": "object" + } + } + ], + "properties": { + "aggregationGroup": { + "oneOf": [ + { + "enum": [ + "mdma_precursor_substance_mass", + "meth_pre_precursor_substance_mass", + "pseudoephedrine_preparation_gross_mass", + "potassium_permanganate_substance_mass", + "pseudoephedrine_preparation_mass" + ] + }, + { + "type": "null" + } + ] + }, + "eligibleRecordCount": { + "minimum": 0, + "type": "integer" + }, + "exactRecordCount": { + "minimum": 0, + "type": "integer" + }, + "excludedRecordCount": { + "minimum": 0, + "type": "integer" + }, + "nonExactRecordCount": { + "minimum": 0, + "type": "integer" + }, + "status": { + "enum": [ + "computed_exact_only", + "not_computed_non_exact_inputs", + "not_computed_ineligible_exact_inputs", + "not_computed_mixed_aggregation_groups", + "not_computed_no_records" + ] + }, + "summedQuantityKg": { + "minimum": 0, + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "status", + "exactRecordCount", + "nonExactRecordCount", + "eligibleRecordCount", + "excludedRecordCount", + "aggregationGroup", + "summedQuantityKg" + ], + "type": "object" + } + }, + "required": [ + "includedQuantitativeRecordCount", + "includedContextRecordCount", + "quantityAggregation", + "corridors", + "contextRecords" + ], + "type": "object" + }, + "sourceLocator": { + "additionalProperties": false, + "properties": { + "paragraph": { + "minimum": 1, + "type": "integer" + }, + "pdfPage": { + "minimum": 1, + "type": "integer" + }, + "printedPage": { + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "pdfPage", + "printedPage", + "paragraph" + ], + "type": "object" + } + }, + "$id": "urn:narcoscope:mcp-output:palimpsest-bridge:v1", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "$schema": { + "const": "./narcoscope-palimpsest-v1.schema.json" + }, + "artifactId": { + "const": "narcoscope.china.official-coverage" + }, + "canonicalUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "dataAsOf": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "datasets": { + "additionalProperties": false, + "properties": { + "drugSeizures": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "drug_seizures" + } + }, + "type": "object" + } + ] + }, + "ofacDesignations": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "data": { + "$ref": "#/$defs/ofacDesignationData" + }, + "datasetId": { + "const": "ofac_designations" + } + }, + "type": "object" + } + ] + }, + "precursorCorridorIncidents": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "data": { + "$ref": "#/$defs/precursorCorridorData" + }, + "datasetId": { + "const": "precursor_corridor_incidents" + }, + "provenance": { + "properties": { + "documentSha256": { + "const": "8397f2799116fe33ce6851ec2c7e03a042886fb9c048f72cdb259724de5ddd6e" + }, + "retrievedAt": { + "const": "2026-08-12T13:50:25Z" + }, + "url": { + "const": "https://www.incb.org/incb/uploads/documents/Publications/AnnualReports/AR2025/Precursors_Report/E_INCB_2025_4_eng.pdf" + } + }, + "required": [ + "documentSha256", + "retrievedAt" + ], + "type": "object" + } + }, + "type": "object" + } + ] + }, + "retailDrugPrices": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "retail_drug_prices" + } + }, + "type": "object" + } + ] + }, + "wildlifeConfiscations": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "wildlife_confiscations" + } + }, + "type": "object" + } + ] + } + }, + "required": [ + "retailDrugPrices", + "drugSeizures", + "precursorCorridorIncidents", + "ofacDesignations", + "wildlifeConfiscations" + ], + "type": "object" + }, + "disclosure": { + "additionalProperties": false, + "properties": { + "exactAddressDisclosure": { + "const": "none" + }, + "identifierDisclosure": { + "const": "none" + }, + "illustrativeDataIncluded": { + "const": false + }, + "level": { + "const": "public_aggregate" + }, + "runtimeCoupling": { + "const": "none_static_artifact" + }, + "sourcePolicy": { + "const": "official_only" + }, + "subjectEntityDisclosure": { + "const": "none" + } + }, + "required": [ + "level", + "sourcePolicy", + "subjectEntityDisclosure", + "exactAddressDisclosure", + "identifierDisclosure", + "illustrativeDataIncluded", + "runtimeCoupling" + ], + "type": "object" + }, + "exclusions": { + "items": { + "additionalProperties": false, + "properties": { + "classification": { + "enum": [ + "illustrative", + "illustrative_or_constructed", + "unreviewed_leads", + "privacy_minimized" + ] + }, + "component": { + "minLength": 1, + "type": "string" + }, + "reason": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "component", + "classification", + "reason" + ], + "type": "object" + }, + "type": "array" + }, + "geography": { + "additionalProperties": false, + "properties": { + "country": { + "const": "China" + }, + "iso2": { + "const": "CN" + }, + "iso3": { + "const": "CHN" + } + }, + "required": [ + "country", + "iso2", + "iso3" + ], + "type": "object" + }, + "interpretation": { + "minLength": 1, + "type": "string" + }, + "limitations": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "schemaVersion": { + "const": "narcoscope.palimpsest.china-aggregate.v1" + } + }, + "required": [ + "$schema", + "schemaVersion", + "artifactId", + "dataAsOf", + "geography", + "disclosure", + "datasets", + "exclusions", + "limitations", + "canonicalUrl", + "interpretation" + ], + "title": "NarcoScope public China aggregate for Palimpsest", + "type": "object" +}
- Changed
get_palimpsest_corridors1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "dataset": { + "additionalProperties": false, + "properties": { + "data": { + "type": "object" + }, + "datasetId": { + "minLength": 1, + "type": "string" + }, + "limitations": { + "$ref": "#/$defs/limitations" + }, + "measurement": { + "$ref": "#/$defs/measurement" + }, + "provenance": { + "$ref": "#/$defs/provenance" + }, + "sourceStatus": { + "const": "official" + }, + "temporalCoverage": { + "$ref": "#/$defs/temporalCoverage" + }, + "topic": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "datasetId", + "topic", + "sourceStatus", + "measurement", + "temporalCoverage", + "provenance", + "data", + "limitations" + ], + "type": "object" + }, + "exclusion": { + "additionalProperties": false, + "properties": { + "classification": { + "enum": [ + "illustrative_or_constructed", + "licensed_conflict_data", + "out_of_scope", + "privacy_minimized", + "safety_minimized" + ] + }, + "component": { + "minLength": 1, + "type": "string" + }, + "reason": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "component", + "classification", + "reason" + ], + "type": "object" + }, + "geography": { + "additionalProperties": false, + "properties": { + "country": { + "enum": [ + "China", + "Myanmar", + "Pakistan" + ] + }, + "iso2": { + "enum": [ + "CN", + "MM", + "PK" + ] + }, + "iso3": { + "enum": [ + "CHN", + "MMR", + "PAK" + ] + } + }, + "required": [ + "country", + "iso2", + "iso3" + ], + "type": "object" + }, + "limitations": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "measurement": { + "additionalProperties": false, + "properties": { + "grain": { + "minLength": 1, + "type": "string" + }, + "method": { + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "official_reported", + "official_action_record" + ] + }, + "unit": { + "minLength": 1, + "type": "string" + }, + "valueType": { + "enum": [ + "statistical_measurement", + "administrative_measurement", + "administrative_action" + ] + } + }, + "required": [ + "status", + "valueType", + "method", + "unit", + "grain" + ], + "type": "object" + }, + "precursorData": { + "additionalProperties": false, + "properties": { + "contextRecords": { + "items": { + "type": "object" + }, + "type": "array" + }, + "corridors": { + "items": { + "$ref": "#/$defs/precursorRecord" + }, + "type": "array" + }, + "crossTargetBilateralRecordCount": { + "const": 0 + }, + "includedContextRecordCount": { + "minimum": 0, + "type": "integer" + }, + "includedQuantitativeRecordCount": { + "minimum": 0, + "type": "integer" + }, + "quantityAggregation": { + "additionalProperties": false, + "properties": { + "reason": { + "minLength": 1, + "type": "string" + }, + "status": { + "const": "not_computed_mixed_claim_semantics" + }, + "summedQuantityKg": { + "const": null + } + }, + "required": [ + "status", + "summedQuantityKg", + "reason" + ], + "type": "object" + } + }, + "required": [ + "includedQuantitativeRecordCount", + "includedContextRecordCount", + "crossTargetBilateralRecordCount", + "quantityAggregation", + "corridors", + "contextRecords" + ], + "type": "object" + }, + "precursorRecord": { + "additionalProperties": false, + "properties": { + "aggregationEligibility": { + "enum": [ + "eligible", + "ineligible_non_exact", + "ineligible_derived", + "ineligible_incompatible_basis" + ] + }, + "aggregationGroup": { + "type": [ + "string", + "null" + ] + }, + "destination": { + "minLength": 1, + "type": "string" + }, + "geographyMatches": { + "items": { + "enum": [ + "CHN", + "MMR", + "PAK" + ] + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "incidentCount": { + "minimum": 1, + "type": [ + "integer", + "null" + ] + }, + "precursor": { + "minLength": 1, + "type": "string" + }, + "quantityBasis": { + "minLength": 1, + "type": "string" + }, + "quantityKg": { + "minimum": 0, + "type": "number" + }, + "quantityRelation": { + "enum": [ + "exact", + "approx", + "less_than", + "greater_than" + ] + }, + "recordKind": { + "enum": [ + "single_incident", + "multi_incident_aggregate", + "annual_aggregate", + "derived_subtotal" + ] + }, + "reportedOrigin": { + "minLength": 1, + "type": "string" + }, + "seizureLocation": { + "type": [ + "string", + "null" + ] + }, + "sourceLocator": { + "$ref": "#/$defs/sourceLocator" + }, + "transit": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": "integer" + } + }, + "required": [ + "geographyMatches", + "reportedOrigin", + "transit", + "destination", + "seizureLocation", + "year", + "precursor", + "quantityKg", + "quantityRelation", + "quantityBasis", + "recordKind", + "aggregationEligibility", + "aggregationGroup", + "incidentCount", + "sourceLocator" + ], + "type": "object" + }, + "provenance": { + "additionalProperties": false, + "properties": { + "documentSha256": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "input": { + "additionalProperties": false, + "properties": { + "path": { + "minLength": 1, + "type": "string" + }, + "sha256": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + } + }, + "required": [ + "path", + "sha256" + ], + "type": "object" + }, + "localDataDate": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "publisher": { + "minLength": 1, + "type": "string" + }, + "retrievedAt": { + "format": "date-time", + "type": "string" + }, + "sourceEdition": { + "minLength": 1, + "type": "string" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "publisher", + "title", + "url", + "sourceEdition", + "localDataDate", + "input" + ], + "type": "object" + }, + "sourceLocator": { + "additionalProperties": false, + "properties": { + "paragraph": { + "minimum": 1, + "type": "integer" + }, + "pdfPage": { + "minimum": 1, + "type": "integer" + }, + "printedPage": { + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "pdfPage", + "printedPage", + "paragraph" + ], + "type": "object" + }, + "temporalCoverage": { + "additionalProperties": false, + "properties": { + "fromYear": { + "type": [ + "integer", + "null" + ] + }, + "kind": { + "enum": [ + "year_range", + "snapshot" + ] + }, + "snapshotDate": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "toYear": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "kind", + "fromYear", + "toYear", + "snapshotDate" + ], + "type": "object" + } + }, + "$id": "urn:narcoscope:mcp-output:palimpsest-corridors:v2", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "$schema": { + "const": "./narcoscope-palimpsest-corridors-v2.schema.json" + }, + "artifactId": { + "const": "narcoscope.china-pakistan-myanmar.official-coverage" + }, + "canonicalUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "dataAsOf": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "datasets": { + "additionalProperties": false, + "properties": { + "drugSeizures": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "drug_seizures" + } + }, + "type": "object" + } + ] + }, + "ofacDesignations": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "ofac_designations" + } + }, + "type": "object" + } + ] + }, + "precursorCorridorIncidents": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "data": { + "$ref": "#/$defs/precursorData" + }, + "datasetId": { + "const": "precursor_corridor_incidents" + } + }, + "type": "object" + } + ] + }, + "retailDrugPrices": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "retail_drug_prices" + } + }, + "type": "object" + } + ] + }, + "wildlifeConfiscations": { + "allOf": [ + { + "$ref": "#/$defs/dataset" + }, + { + "properties": { + "datasetId": { + "const": "wildlife_confiscations" + } + }, + "type": "object" + } + ] + } + }, + "required": [ + "retailDrugPrices", + "drugSeizures", + "precursorCorridorIncidents", + "ofacDesignations", + "wildlifeConfiscations" + ], + "type": "object" + }, + "disclosure": { + "additionalProperties": false, + "properties": { + "exactAddressDisclosure": { + "const": "none" + }, + "identifierDisclosure": { + "const": "none" + }, + "illustrativeDataIncluded": { + "const": false + }, + "joinPolicy": { + "const": "geography_and_time_only" + }, + "level": { + "const": "public_country_aggregate" + }, + "politicalOrArmedActorInference": { + "const": "prohibited" + }, + "preciseCoordinateDisclosure": { + "const": "none" + }, + "runtimeCoupling": { + "const": "none_static_artifact" + }, + "sourcePolicy": { + "const": "official_only" + }, + "subjectEntityDisclosure": { + "const": "none" + } + }, + "required": [ + "level", + "sourcePolicy", + "subjectEntityDisclosure", + "exactAddressDisclosure", + "preciseCoordinateDisclosure", + "identifierDisclosure", + "illustrativeDataIncluded", + "runtimeCoupling", + "joinPolicy", + "politicalOrArmedActorInference" + ], + "type": "object" + }, + "exclusions": { + "items": { + "$ref": "#/$defs/exclusion" + }, + "minItems": 5, + "type": "array" + }, + "geographies": { + "items": { + "$ref": "#/$defs/geography" + }, + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + "interpretation": { + "minLength": 1, + "type": "string" + }, + "limitations": { + "$ref": "#/$defs/limitations" + }, + "schemaVersion": { + "const": "narcoscope.palimpsest.corridor-aggregate.v2" + } + }, + "required": [ + "$schema", + "schemaVersion", + "artifactId", + "dataAsOf", + "geographies", + "disclosure", + "datasets", + "exclusions", + "limitations", + "canonicalUrl", + "interpretation" + ], + "title": "NarcoScope public China-Pakistan-Myanmar aggregate for Palimpsest", + "type": "object" +}
- Changed
get_story1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "article": { + "additionalProperties": false, + "properties": { + "automationDisclosure": { + "minLength": 1, + "type": "string" + }, + "contentClass": { + "minLength": 1, + "type": "string" + }, + "contentHash": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "correctionsStatus": { + "minLength": 1, + "type": "string" + }, + "dataAsOf": { + "format": "date", + "type": [ + "string", + "null" + ] + }, + "dek": { + "minLength": 1, + "type": "string" + }, + "dossierUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "htmlUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "humanReviewStatus": { + "minLength": 1, + "type": "string" + }, + "id": { + "minLength": 1, + "type": "string" + }, + "machineBriefUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "publishedAt": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "revisionHash": { + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "rightToReplyStatus": { + "minLength": 1, + "type": "string" + }, + "simulatedHumanVoicesIncluded": { + "type": "boolean" + }, + "slug": { + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "testimonyIncluded": { + "type": "boolean" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "slug", + "title", + "dek", + "contentClass", + "dataAsOf", + "publishedAt", + "updatedAt", + "htmlUrl", + "dossierUrl", + "machineBriefUrl", + "revisionHash", + "contentHash", + "automationDisclosure", + "humanReviewStatus", + "correctionsStatus", + "rightToReplyStatus", + "testimonyIncluded", + "simulatedHumanVoicesIncluded" + ], + "type": "object" + }, + "artifact": { + "enum": [ + "metadata", + "machine-brief", + "dossier" + ] + }, + "content": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + }, + "schema": { + "const": "narcoscope.api.story.v1" + } + }, + "required": [ + "schema", + "artifact", + "article", + "content" + ], + "type": "object" +}
- Changed
list_capabilities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "api": { + "additionalProperties": false, + "properties": { + "base_url": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "openapi": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "resources": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "base_url", + "openapi", + "resources" + ], + "type": "object" + }, + "boundaries": { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "featured": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "minLength": 1, + "type": "string" + }, + "outcome": { + "minLength": 1, + "type": "string" + }, + "title": { + "minLength": 1, + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^https://", + "type": "string" + } + }, + "required": [ + "id", + "title", + "outcome", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "feeds": { + "additionalProperties": false, + "properties": { + "atom": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "json": { + "format": "uri", + "pattern": "^https://", + "type": "string" + } + }, + "required": [ + "json", + "atom" + ], + "type": "object" + }, + "mcp": { + "additionalProperties": false, + "properties": { + "current_protocol": { + "const": "2026-07-28" + }, + "discovery_method": { + "const": "server/discover" + }, + "endpoint": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "legacy_initialization": { + "const": true + }, + "lifecycle": { + "const": "stateless-per-request" + }, + "protocol_versions": { + "maxItems": 3, + "minItems": 3, + "prefixItems": [ + { + "const": "2026-07-28" + }, + { + "const": "2025-06-18" + }, + { + "const": "2025-03-26" + } + ], + "type": "array" + }, + "tools": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "transport": { + "const": "streamable-http" + } + }, + "required": [ + "endpoint", + "transport", + "current_protocol", + "protocol_versions", + "lifecycle", + "discovery_method", + "legacy_initialization", + "tools" + ], + "type": "object" + }, + "product": { + "additionalProperties": false, + "properties": { + "audience": { + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "name": { + "const": "NarcoScope" + }, + "promise": { + "minLength": 1, + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^https://", + "type": "string" + } + }, + "required": [ + "name", + "url", + "promise", + "audience" + ], + "type": "object" + }, + "schema": { + "const": "narcoscope.capabilities.v1" + } + }, + "required": [ + "schema", + "product", + "featured", + "api", + "mcp", + "feeds", + "boundaries" + ], + "type": "object" +}
1 tool update
- Added
get_palimpsest_bri_context
1 tool update
- Added
get_palimpsest_corridors
5 tool updates
- First observed
get_newsroom - First observed
get_overview - First observed
get_palimpsest_bridge - First observed
get_story - First observed
list_capabilities
Publisher details
- Operator
- beepboop2025 · Publisher source
- Operator website
- https://github.com/beepboop2025 · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://www.narcoscope.com/developers · Publisher source
- Trust center
- Not available
- Restrictions
- Public-interest evidence with privacy minimization, source-specific rights and causal-inference limits. · Publisher source
Related MCP Connectors
Read-only discovery and bounded access to a finite market briefing with evidence boundaries.
Reviewed public-data search and execution with provenance and verifiable integrity receipts.
Read-only public financial evidence from LiquiLens, Undertow, Seiche and Palimpsest.
Bounded authorization and independently verifiable execution evidence for agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables coding agents to discover, optionally rank, and exactly read bounded source-addressed evidence from large repositories and noisy logs, with local-only privacy controls and quota-aware recovery.2MIT
- AlicenseNot gradedqualityBmaintenanceProvides evidence-oriented MCP service for cryptographically identified agents, bounded public contracts, privacy-preserving records, and append-only audit.Apache 2.0
- AlicenseAqualityCmaintenanceEnables privacy-aware, deterministic, read-only chat analysis through tools for briefs, aggregate interaction signals, evidence-aware claim audits, and canonical resource discovery.441MIT
- FlicenseNot gradedqualityBmaintenanceRole-aware MCP server over real HPC and cloud log corpora (BGL, OpenStack, Zookeeper) in SereneDB, where every answer cites the exact SQL that ran, backed by a tamper-evident, hash-chained evidence ledger.-
Glama MCP Gateway
Add one secure layer between your agents and this server.