protogrid

Search / com.incitefulmed/academic

Inciteful

R0· no sign-in

Citation graph search over OpenAlex: similar papers, citation networks, paths and BibTeX export.

v0.1.0 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality91new
Trust95of 100
Uptime, 30 days94%
Latency p50556 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "academic": {
      "type": "http",
      "url": "https://incitefulmed.com/academic/mcp"
    }
  }
}
claude mcp add --transport http academic https://incitefulmed.com/academic/mcp
[mcp_servers.academic]
url = "https://incitefulmed.com/academic/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "academic": {
      "type": "remote",
      "url": "https://incitefulmed.com/academic/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "academic": {
      "type": "http",
      "url": "https://incitefulmed.com/academic/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=academic&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vaW5jaXRlZnVsbWVkLmNvbS9hY2FkZW1pYy9tY3AifQ%3D%3D"
}
{
  "servers": {
    "academic": {
      "type": "http",
      "url": "https://incitefulmed.com/academic/mcp"
    }
  }
}
{
  "mcpServers": {
    "academic": {
      "httpUrl": "https://incitefulmed.com/academic/mcp"
    }
  }
}
extensions:
  "academic":
    enabled: true
    name: "academic"
    type: streamable_http
    uri: "https://incitefulmed.com/academic/mcp"
    timeout: 300

Quality 91 / 100new

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene94 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations8 of 8 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 3,110 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pull, stability.new_linkstool history recorded for 4 of the 7 days needed
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

8 tools, about 3,110 tokens to load them all · tool set da998e4e4ff9 · tools last changed 2026-11-10 · checked 2026-11-14 07:03 UTC

Tool changes

  • search_literaturechangedoutput schema

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 95 / 100

provenance85
liveness98
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-94% +updated-5d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://incitefulmed.com/academic/mcp streamable-httpnoneyes94%556 ms2026-07-282026-11-14

Tools (8)

connect_papersread-onlyFind citation paths between two papers (DOI, OpenAlex ID or PMID), treating each citation as a link in either direction. Returns the paths, the citation edges (citing → cited), the papers on the paths, and each path's hop count in provenance.hops. extended: true also returns longer paths, aiming for at least 5. It shows how two lines of work relate.
explore_citation_networkread-onlyMap a field by its citations rather than its keywords: rank papers, authors, journals or institutions in the depth-2 citation graph Inciteful builds around 1–500 seed papers. analysis: similar (shared references and co-citation with the seeds), important (local PageRank), reviews (papers citing many others in the graph), recent (PageRank among papers from the last 3 years), authors, journals, institutions; or references / citations: the seeds' reference lists or citing papers from OpenAlex, sorted by global cited_by_count, with the total count. A graph that is not cached yet can take a minute to build. title_all / title_any / title_none filter by words in paper titles. They match titles only (not abstracts or full text), with Porter stemming. year_from / year_to filter by publication year. Title and year filters apply to the graph analyses, not to references or citations. limit is at most 100. Results carry provenance (method, graph size and depth, the SQL run) and diagnostics.
export_citationsread-onlyBuild BibTeX or RIS citations for up to 100 papers (DOI, OpenAlex ID, PMID or PMCID) from their OpenAlex records, with entry types, years, volume, issue, pages and escaping. Each row holds one entry; join the entries with a blank line to make a .bib or .ris file. Inputs it cannot match are listed in unresolved.
find_similar_papersread-onlyRanks papers by their citation links to the seeds, which surfaces related work that keyword search misses. Give 1–500 seed papers (DOIs, OpenAlex IDs or PMIDs); returns the papers most similar to them by citation links, sorted by score. Method: fast similarity, Adamic/Adar plus Salton co-citation on a depth-1 citation graph. With 2–15 seeds, each seed is ranked separately and the rankings are merged by reciprocal rank, so papers that rank well for several seeds come out on top; above 15, it uses Adamic/Adar against a synthetic paper that cites all the seeds. Seeds are left out of the results, and scores rank within one result set. limit is at most 100. Unresolved seeds are listed in diagnostics.
get_papersread-onlyFetch OpenAlex records for up to 100 papers by DOI, OpenAlex ID (W…), PMID or PMCID: abstract, authors, venue, type and version, is_retracted, PMID/PMCID and the best open-access link with its licence. It does not use the citation graph. Inputs it cannot match come back in unresolved with a reason.
query_citation_graphread-onlyRun your own read-only SQLite query on the citation graph Inciteful builds around 1–500 seed papers (depth 2). It queries the Inciteful citation graph API; schema: https://incitefulmed.com/academic/help/power-users#database-schema Rules: a single SELECT statement. Rows returned: the limit argument if given, else the query's trailing LIMIT, else 100; at most 500. OFFSET (and LIMIT a, b) is rejected; page with a narrower WHERE or an ORDER BY instead. Schema: - papers(paper_id TEXT: OpenAlex ID (W…); doi TEXT without the https://doi.org/ prefix; authors TEXT: JSON array of {author_id, name, sequence, position, institution {id, name, ror}}; num_authors INTEGER; title TEXT; published_year INTEGER; journal TEXT; num_citing INTEGER; num_cited_by INTEGER; distance INTEGER; page_rank REAL; adamic_adar REAL; cocite REAL). num_citing and num_cited_by are in-graph counts (citations between papers in this graph), not global citation counts. - authors(author_id TEXT: OpenAlex author ID without the A prefix; paper_id TEXT; name TEXT; sequence INTEGER, from 0; affiliation TEXT; affiliation_id TEXT: OpenAlex institution ID without the I prefix; ror TEXT: ROR URL; published_year INTEGER; partial_page_rank REAL: the author's share of the paper's page_rank) - metadata(name TEXT, value TEXT): one row each for graph_depth, graph_snapshot, prune_threshold, highly_cited_not_expanded, seeds_not_expanded, paper_count, citation_count. value is TEXT; use CAST(value AS INTEGER) to compare numbers. - title_search(paper_id, search_text): an FTS5 index of the titles with Porter stemming; search_text holds the titles (paper IDs are indexed too). Query it as a table function, starting the match text with the column filter: SELECT paper_id FROM title_search('search_text: vagus AND nerve'). AND, OR, NOT and parentheses work; bm25(title_search) ranks matches, smaller is better. - title_terms(term, doc_count): the stemmed title terms and the number of papers each appears in, leaving out a few common words. - The Research Organization Registry (active organizations), attached as ror; join on authors.ror = ror.organizations.ror_url: organizations(ror_id, ror_url, display_name, status, established, types, country_code, country_name, city, latitude, longitude), names(ror_id, name, name_types, language), external_ids(ror_id, id_type, preferred_id, external_id), relationships(ror_id, related_ror_id, related_name, relationship_type). What the schema cannot tell you: - There is no edge table, so SQL cannot tell which papers cite which. - Papers with no citation inside the graph have NULL num_citing, num_cited_by, distance, page_rank, adamic_adar and cocite. - With one seed, the seed is at distance 0, its citing and cited papers at 1 and their neighbours at 2, so distance > 0 leaves the seed out. With several seeds a synthetic paper W0 ("Temp Paper", year 1900) cites every seed: W0 is at distance 0, the seeds at 1 and their neighbours at 2, so distance > 1 leaves out W0 and the seeds; otherwise add paper_id <> 'W0'. Then cocite is NULL in every row (nothing cites W0) and adamic_adar is measured against W0. Examples: 1. One seed: the highest-PageRank papers since 2020 with "stimulation" in the title: SELECT paper_id, title, published_year, page_rank FROM papers WHERE distance > 0 AND published_year >= 2020 AND paper_id IN (SELECT paper_id FROM title_search('search_text: stimulation')) ORDER BY page_rank DESC LIMIT 20 2. Authors ranked by their share of PageRank: SELECT author_id, name, COUNT(*) AS papers, SUM(partial_page_rank) AS influence FROM authors GROUP BY author_id, name ORDER BY influence DESC LIMIT 20
read_paperread-onlyRead the full text of an open-access paper from PubMed Central (PMC BioC) in chunks: pass offset (0 to start) and max_chars (up to 40000), then continue from next_offset until it is null. Returns the article's licence and a sha256 of the whole text. When PMC has no text for the paper, returns candidate open-access links (publisher or repository) in rows instead. Accepts a DOI, OpenAlex ID, PMID or PMCID.
search_literatureread-onlyA live keyword search of OpenAlex (CC0 metadata), not of the citation graph snapshot. It matches titles, abstracts and full text where OpenAlex has it, ranked by relevance. Use it to find seed papers when you have a topic but no DOIs yet. Keyword matches miss related work that uses different words, which the citation graph finds. It is not a systematic search. Returns OpenAlex ID, DOI, title, year, venue, global cited_by_count, type, is_retracted and has_abstract; page with next_cursor. limit is at most 50. Rows carry no abstracts or authors.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.incitefulmed/academic",
  "icons": [
    {
      "src": "https://incitefulmed.com/academic/mcp/assets/icon.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "Inciteful",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://incitefulmed.com/academic/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.0",
  "repository": {
    "id": "1373530266",
    "url": "https://github.com/inciteful-xyz/inciteful-mcp",
    "source": "github"
  },
  "websiteUrl": "https://incitefulmed.com/academic/mcp",
  "description": "Citation graph search over OpenAlex: similar papers, citation networks, paths and BibTeX export."
}