Skip to main content
Glama
cinii-mcp

cinii-mcp

by ckgerteis

cinii_search_kaken

Read-onlyIdempotent

Search KAKEN research projects by keyword, researcher, institution, year, or project ID. Fetch project records directly by ID without a query.

Instructions

Search KAKEN (科研費) research projects. Returns the unified envelope (record_type 'project').

A project can be looked up by project_id (e.g. 18K00968) without a query.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "params": "<params>"
    },
    "name": "cinii_search_kaken"
  }
}

Input Schema

NameRequiredDescriptionDefault
paramsYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv3.3.0
    • addedInput schema / $defs / KakenSearchInput / properties / data_source
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Data source(s), comma-separated, e.g. 'JALC', 'IRDB', 'CROSSREF', 'NDL_SEARCH', 'NACSIS_CAT', 'KAKEN', 'CIA', 'CIB', 'DATACITE', 'JDCAT'. Sent as dataSourceType. Unknown values are refused here, because CiNii answers them with zero records.",
      +  "title": "Data Source"
      +}
    • addedInput schema / $defs / KakenSearchInput / properties / language
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Language(s) of the records, as ISO 639-1 codes, comma-separated: 'ja', 'en', 'zh', 'ko', or 'ja,en'. Sent as languageType. Filters by the language catalogued for the record, not the language of the query.",
      +  "title": "Language"
      +}
    • addedInput schema / $defs / KakenSearchInput / properties / project_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "KAKEN project or area number(s), comma-separated (e.g. 18K00968). Sent as projectId.",
      +  "title": "Project Id"
      +}
    • addedInput schema / $defs / KakenSearchInput / properties / query / anyOf
      Added value: +[
      +  {
      +    "maxLength": 2000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / $defs / KakenSearchInput / properties / query / default
      Added value: +null
    • addedInput schema / $defs / KakenSearchInput / properties / query / description
      Added value: +"Free-text search terms (Japanese or English). Optional when another criterion (an identifier, a title, a filter) is given."
    • removedInput schema / $defs / KakenSearchInput / properties / query / maxLength
      Removed value: -2000
    • removedInput schema / $defs / KakenSearchInput / properties / query / minLength
      Removed value: -1
    • removedInput schema / $defs / KakenSearchInput / properties / query / type
      Removed value: -"string"
    • addedInput schema / $defs / KakenSearchInput / properties / researcher_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Researcher identifier(s), comma-separated: a KAKEN researcher number, an NRID, a CiNii author ID (DA…) or a researcher CRID. Sent as researcherId.",
      +  "title": "Researcher Id"
      +}
    • addedInput schema / $defs / KakenSearchInput / properties / sort
      Added value: +{
      +  "$ref": "#/$defs/SortOrder",
      +  "default": "4",
      +  "description": "Sort order. NEWEST/OLDEST = by year (publication, degree award or project start); RELEVANCE (default); CITATIONS_DESC = citation count, articles only; CRID_ASC = by CRID, cross search only; NAME_ASC/NAME_DESC, PROJECTS_DESC/PROJECTS_ASC and PRODUCTS_DESC/PRODUCTS_ASC = researcher name, number of related projects and number of related research products, researcher search only (which does not accept OLDEST)."
      +}
    • addedInput schema / $defs / KakenSearchInput / properties / start / maximum
      Added value: +10000
    • removedInput schema / $defs / KakenSearchInput / required
      Removed value: -[
      -  "query"
      -]
    • addedInput schema / $defs / SortOrder
      Added value: +{
      +  "description": "CiNii Research OpenSearch v2 `sortorder` codes.\n\nNot every code is valid for every search type, and CiNii does not refuse\none that is not: sortorder=5 on articles is silently ignored and the\nresults come back in relevance order, a page that says it is sorted when\nit is not. Each input model therefore checks its sort against _SORT_SCOPE.",
      +  "enum": [
      +    "0",
      +    "1",
      +    "4",
      +    "5",
      +    "6",
      +    "10",
      +    "20",
      +    "21",
      +    "30",
      +    "31",
      +    "40"
      +  ],
      +  "title": "SortOrder",
      +  "type": "string"
      +}
  2. Changed3 schema fields changedv3.2.0
    • changedInput schema / $defs / KakenSearchInput / properties / institution / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / $defs / KakenSearchInput / properties / query / maxLength
      Added value: +2000
    • changedInput schema / $defs / KakenSearchInput / properties / researcher / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 2000,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. First observedv3.0.0

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds some value by naming the return shape ('unified envelope, record_type project'), but says nothing about pagination (start/count limits), empty-result behavior, or the sort-order validation quirks the schema hints at.

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

Conciseness4/5

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

Three short sentences, front-loaded with the purpose and followed by the return type and the lookup shortcut. Nothing is padded, though 'unified envelope' is project-specific jargon an outsider may not decode.

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?

An output schema exists, so return values needn't be described, and annotations cover safety. What remains thin is filter semantics for a 13-field input model and the lack of sibling routing; the description covers only the identifier shortcut.

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

Parameters2/5

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

The reported schema description coverage is 0% for the top-level parameter, and the description only elaborates on one of the inner fields (project_id, with an example). The other inner options — researcher, institution, from_year/to_year, data_source, lang — get no explanation in the description, so the agent is left working from bare field names.

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?

Names a specific verb and resource ('Search KAKEN (科研費) research projects') and states the record type it returns. It does not, however, distinguish itself from the close sibling cinii_search_projects_and_products, which also returns projects — an agent must guess which to pick for a projects-only query.

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

Usage Guidelines3/5

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

One concrete usage path is given: 'A project can be looked up by project_id ... without a query'. That is genuinely useful and would be hard to infer. But there is no guidance on when to prefer this over cinii_search_projects_and_products or cinii_search_all, which is the main routing decision an agent faces.

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