Skip to main content
Glama

Open data: clinical trials, EU tenders, companies, fuel prices

Scholarly Paper Search (OpenAlex): DOI, year, venue, citations, open-access link

scholarly-search
Read-onlyIdempotent

Search the OpenAlex index of scholarly works by keyword, year range and open-access status, and get each paper's title, DOI, year, venue, type, citation count and open-access link. Read from api.openalex.org when called. Each result: openalex_id, title, doi, year, publication_date, venue, type, cited_by_count, is_open_access, oa_status, open_access_url, language. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.

Input Schema

NameRequiredDescriptionDefault
limitNoAt most this many results (default 100).
queryNoKeywords to search for in titles, abstracts and full text. Example: "graph neural networks".
year_toNoLast publication year to include. Example: 2026.
oa_statusNoKeep only works with this open-access status (empty: all works). Example: "green".
year_fromNoFirst publication year to include. Example: 2020.

Output Schema

NameRequiredDescriptionDefault
countYeshow many results came back
itemsYesthe results, one object each
partialNosome of the source's requests failed: the results are incomplete
productNo
sourcesNowhere the data came from: each source's name, licence and the attribution to show with it
fetched_atNowhen the source was read (Unix seconds)
truncated_fromNothe answer was cut to fit: this many results came back in all

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / sources
      Added value: +{
      +  "description": "where the data came from: each source's name, licence and the attribution to show with it",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "count": {
      +      "description": "how many results came back",
      +      "type": "integer"
      +    },
      +    "fetched_at": {
      +      "description": "when the source was read (Unix seconds)",
      +      "type": "integer"
      +    },
      +    "items": {
      +      "description": "the results, one object each",
      +      "items": {
      +        "properties": {
      +          "cited_by_count": {
      +            "description": "cited_by_count (integer)"
      +          },
      +          "doi": {
      +            "description": "doi (text)"
      +          },
      +          "is_open_access": {
      +            "description": "is_open_access (bool)"
      +          },
      +          "language": {
      +            "description": "language (text)"
      +          },
      +          "oa_status": {
      +            "description": "oa_status (text)"
      +          },
      +          "open_access_url": {
      +            "description": "open_access_url (url)"
      +          },
      +          "openalex_id": {
      +            "description": "openalex_id (url)"
      +          },
      +          "publication_date": {
      +            "description": "publication_date (date)"
      +          },
      +          "title": {
      +            "description": "title (text)"
      +          },
      +          "type": {
      +            "description": "type (text)"
      +          },
      +          "venue": {
      +            "description": "venue (text)"
      +          },
      +          "year": {
      +            "description": "year (integer)"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "partial": {
      +      "description": "some of the source's requests failed: the results are incomplete",
      +      "type": "boolean"
      +    },
      +    "product": {
      +      "type": "string"
      +    },
      +    "truncated_from": {
      +      "description": "the answer was cut to fit: this many results came back in all",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "count",
      +    "items"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnly/openWorld/idempotent safety profile, and the description usefully adds auth (X-RapidAPI-Key header), upstream source (api.openalex.org), and a concrete rate limit (50 requests/month). However, the RapidAPI URL points to a clinical-trials/tenders API rather than an OpenAlex listing, which could mislead an agent trying to obtain credentials.

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?

Front-loaded with the search action and result shape, then prerequisites. The field enumeration duplicates the output schema and the auth sentence is verbose, but no sentence is pure filler.

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

Completeness4/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 explained, and auth plus rate limits are covered, leaving an agent able to invoke it correctly. The only gap is the mismatched RapidAPI URL, which slightly undercuts the credential guidance.

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 description coverage is 100%, so the schema itself documents query, year_from, year_to, oa_status and limit with examples. The description restates the filter axes but adds no syntax or format detail beyond what the schema already provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (search) plus resource (OpenAlex index of scholarly works) and enumerates filter dimensions (keyword, year range, open-access status) and returned fields. Siblings are all unrelated domains, so no differentiation is needed, but the tool's domain is unmistakable.

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

Usage Guidelines4/5

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

The description clearly establishes the retrieval context (academic literature search filtered by year/OA) and mentions the free-tier limit, which informs usage planning. It stops short of explicit when-not guidance or naming alternatives, so it's a solid 4 rather than a 5.

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.

Resources