Skip to main content
Glama

Islam West Africa Collection (IWAC)

Co-occurrence matrix

get_cooccurrence
Read-onlyIdempotent

Count pairs of metadata values co-tagged on the same items. Matrix/network views show descriptive associations, not causal links. Filters apply before pair counting; top_n caps the vocabulary.

Input Schema

NameRequiredDescriptionDefault
exactNoAND values. Fields: subject/spatial/author/language/country/newspaper/topic_id/min_prob/scored_by; country_raw=whole cell; polarity:<model>.
fieldNosubject (default) | spatial | author | language
top_nNoValues on each axis (default 15, max 30)
subsetNoarticles (default) | publications | references
countryNoExact country name (accents optional)
date_toNo
keywordNo
subjectNoExact tag
date_fromNoInclusive date bounds: YYYY[-MM[-DD]]
newspaperNoNewspaper/periodical substring
hijri_yearNo
hijri_monthNo
keyword_modeNoliteral: the whole keyword as one substring
keyword_aliasesNo

Output Schema

NameRequiredDescriptionDefault
noteNo
viewYes
fieldYes
matrixYes
subsetYes
valuesYes
filtersYes
top_pairsYes
total_matchesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / keyword_mode / description
      Added value: +"literal: the whole keyword as one substring"
  2. Changed14 schema fields changed
    • changedInput schema / properties / country / description
      Previous value: -"Exact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)"New value: +"Exact country name (accents optional)"
    • changedInput schema / properties / date_from / description
      Previous value: -"YYYY-MM-DD (or YYYY)"New value: +"Inclusive date bounds: YYYY[-MM[-DD]]"
    • removedInput schema / properties / date_to / description
      Removed value: -"YYYY-MM-DD (or YYYY)"
    • addedInput schema / properties / exact
      Added value: +{
      +  "additionalProperties": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "maxItems": 20,
      +    "minItems": 1,
      +    "type": "array"
      +  },
      +  "description": "AND values. Fields: subject/spatial/author/language/country/newspaper/topic_id/min_prob/scored_by; country_raw=whole cell; polarity:<model>.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / hijri_month
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / hijri_year
      Added value: +{
      +  "type": "integer"
      +}
    • removedInput schema / properties / keyword / description
      Removed value: -"ONE French concept keyword; substring over the subset's text fields"
    • addedInput schema / properties / keyword / minLength
      Added value: +1
    • addedInput schema / properties / keyword_aliases
      Added value: +{
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
    • addedInput schema / properties / keyword_mode
      Added value: +{
      +  "enum": [
      +    "literal",
      +    "all_terms"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / newspaper / description
      Previous value: -"Newspaper (articles) or periodical/series title (publications)"New value: +"Newspaper/periodical substring"
    • changedInput schema / properties / subject / description
      Previous value: -"Exact subject tag (pipe-aware)"New value: +"Exact tag"
    • removedInput schema / properties / top_n / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / top_n / minimum
      Removed value: --9007199254740991
  3. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  4. Added

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower, yet the description adds real value: filters are applied before pair counting (an ordering guarantee that affects results) and top_n caps vocabulary size. The explicit warning that associations are descriptive, not causal, is exactly the kind of interpretive guardrail annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each doing distinct work: purpose, interpretive caveat, parameter behavior. The purpose is front-loaded and there is no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 14 parameters, a nested object, and all-optional arguments, the description should say more about how date, keyword, and hijri filters interact with the exact/field axis. The output schema exists, so return-value explanation is rightly omitted. Adequate but with clear gaps for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 64%, so the schema documents field, top_n, subset, and the nested exact object, but leaves date_to, keyword, hijri_year, hijri_month, and keyword_aliases largely bare. The description only reinforces top_n ('caps the vocabulary') and the general filter behavior, adding little for the undocumented half. Baseline 3 is appropriate given partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause names a specific operation on a specific resource: counting pairs of metadata values co-tagged on the same items. That is clearly distinct from distribution tools like get_field_distribution or get_semantic_map. It stops short of naming a sibling to contrast against, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to reach for this tool versus get_field_distribution, get_semantic_map, or get_topic_distribution. The clause about matrix/network views showing descriptive rather than causal associations is an interpretive caveat about output, not usage routing. An agent must infer the use case from the purpose sentence alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.