← WebMCP Directory

Tool tree

papertrail-platform.vercel.app

Health & EducationTools verified
Website
PaperTrail exposes your literature-review workspace to AI agents through WebMCP. You curate and judge; your agent searches, annotates, compares, and drafts — on the same canvas, with full provenance.
Explore capabilities
    search_literatureAnswer

    Search OpenAlex (250M+ scholarly works) by keyword. Results are staged in the app Inbox panel so the human can see them (a new search replaces the previous staging); nothing is added to the workspace until add_papers is called. Results include abstract snippets — usually enough to pick the best papers and write grounded summary notes without extra calls.

    View tool JSON
    {
      "name": "search_literature",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search OpenAlex (250M+ scholarly works) by keyword. Results are staged in the app Inbox panel so the human can see them (a new search replaces the previous staging); nothing is added to the workspace until add_papers is called. Results include abstract snippets — usually enough to pick the best papers and write grounded summary notes without extra calls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search phrase, e.g. \"LLM agent communication failure\""
          },
          "max_results": {
            "type": "integer",
            "minimum": 1,
            "maximum": 15,
            "description": "Default 8."
          },
          "from_year": {
            "type": "integer",
            "description": "Only include works published this year or later."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    }
    get_paper_detailsAnswer

    Full record for one paper: abstract, topics, venue, citations, DOI, plus Semantic Scholar enrichment when available (one-sentence TLDR, open-access PDF, influential citation count). Works for ids already in the workspace, in the Inbox, or any OpenAlex work id (W…).

    View tool JSON
    {
      "name": "get_paper_details",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full record for one paper: abstract, topics, venue, citations, DOI, plus Semantic Scholar enrichment when available (one-sentence TLDR, open-access PDF, influential citation count). Works for ids already in the workspace, in the Inbox, or any OpenAlex work id (W…).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_id": {
            "type": "string",
            "description": "OpenAlex work id, e.g. W2124364966"
          }
        },
        "required": [
          "paper_id"
        ],
        "additionalProperties": false
      }
    }
    get_citation_contextsAnswer

    How other papers actually cite this work: verbatim sentences from citing papers with intents (methodology/background/result), via Semantic Scholar. Use it to characterize a paper accurately in comparisons and related-work drafts — what claim of the paper really travels in the literature.

    View tool JSON
    {
      "name": "get_citation_contexts",
      "kind": "answer",
      "impl": "imperative",
      "description": "How other papers actually cite this work: verbatim sentences from citing papers with intents (methodology/background/result), via Semantic Scholar. Use it to characterize a paper accurately in comparisons and related-work drafts — what claim of the paper really travels in the literature.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_id": {
            "type": "string"
          },
          "max_citations": {
            "type": "integer",
            "minimum": 3,
            "maximum": 20,
            "description": "Default 8."
          }
        },
        "required": [
          "paper_id"
        ],
        "additionalProperties": false
      }
    }
    get_workspace_stateAnswer

    The human and you are looking at the same canvas. Call this first: it shows every section, paper, note count, and artifact — plus what the human currently has selected in the inspector (human_selection), so you can react to what they are reading.

    View tool JSON
    {
      "name": "get_workspace_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "The human and you are looking at the same canvas. Call this first: it shows every section, paper, note count, and artifact — plus what the human currently has selected in the inspector (human_selection), so you can react to what they are reading.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_artifactAnswer

    Read the full current text of one artifact (comparison table, gap analysis, related-work draft) by id. This returns what the canvas holds NOW — including any edits the human made after you published. Read it before revising anything.

    View tool JSON
    {
      "name": "get_artifact",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the full current text of one artifact (comparison table, gap analysis, related-work draft) by id. This returns what the canvas holds NOW — including any edits the human made after you published. Read it before revising anything.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "artifact_id": {
            "type": "string",
            "description": "From get_workspace_state artifacts[].id"
          }
        },
        "required": [
          "artifact_id"
        ],
        "additionalProperties": false
      }
    }
    add_papersAction

    Add papers from the Inbox (or by OpenAlex id) to a section of the canvas. The cards appear immediately for the human. Optionally attach per-paper notes via "notes" — one entry per paper_id, each grounded in that paper's abstract snippet (from search results) or details.

    View tool JSON
    {
      "name": "add_papers",
      "kind": "act",
      "impl": "imperative",
      "description": "Add papers from the Inbox (or by OpenAlex id) to a section of the canvas. The cards appear immediately for the human. Optionally attach per-paper notes via \"notes\" — one entry per paper_id, each grounded in that paper's abstract snippet (from search results) or details.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 10
          },
          "section": {
            "type": "string",
            "description": "Section title or id. Defaults to the first section."
          },
          "notes": {
            "type": "array",
            "description": "Optional per-paper notes. Match paper_id to the papers you are adding.",
            "maxItems": 10,
            "items": {
              "type": "object",
              "properties": {
                "paper_id": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "summary",
                    "method",
                    "finding",
                    "limitation",
                    "connection",
                    "question"
                  ]
                },
                "content": {
                  "type": "string",
                  "maxLength": 2000
                }
              },
              "required": [
                "paper_id",
                "type",
                "content"
              ]
            }
          }
        },
        "required": [
          "paper_ids"
        ],
        "additionalProperties": false
      }
    }
    move_papersAction

    Move one or more papers to another section of the canvas, e.g. promoting papers you judged relevant to "Reading".

    View tool JSON
    {
      "name": "move_papers",
      "kind": "act",
      "impl": "imperative",
      "description": "Move one or more papers to another section of the canvas, e.g. promoting papers you judged relevant to \"Reading\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 20
          },
          "to_section": {
            "type": "string",
            "description": "Target section title or id."
          }
        },
        "required": [
          "paper_ids",
          "to_section"
        ],
        "additionalProperties": false
      }
    }
    remove_papersAction

    Remove papers from the canvas. Destructive: the human sees removals immediately and can undo only by re-adding.

    View tool JSON
    {
      "name": "remove_papers",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove papers from the canvas. Destructive: the human sees removals immediately and can undo only by re-adding.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 20
          }
        },
        "required": [
          "paper_ids"
        ],
        "additionalProperties": false
      }
    }
    annotate_paperAction

    Attach a structured note (summary | method | finding | limitation | connection | question) to a paper. Notes render on the canvas as first-class cards the human can edit or delete. Ground every note in the paper's abstract or details — do not speculate.

    View tool JSON
    {
      "name": "annotate_paper",
      "kind": "act",
      "impl": "imperative",
      "description": "Attach a structured note (summary | method | finding | limitation | connection | question) to a paper. Notes render on the canvas as first-class cards the human can edit or delete. Ground every note in the paper's abstract or details — do not speculate.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "summary",
              "method",
              "finding",
              "limitation",
              "connection",
              "question"
            ]
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          }
        },
        "required": [
          "paper_id",
          "type",
          "content"
        ],
        "additionalProperties": false
      }
    }
    create_comparisonAction

    Returns structured material (abstract excerpts, notes, metadata) for 2-6 papers so you can build a comparison. Analyze the material, then publish the table with save_artifact (kind: "comparison").

    View tool JSON
    {
      "name": "create_comparison",
      "kind": "act",
      "impl": "imperative",
      "description": "Returns structured material (abstract excerpts, notes, metadata) for 2-6 papers so you can build a comparison. Analyze the material, then publish the table with save_artifact (kind: \"comparison\").",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 2,
            "maxItems": 6
          },
          "dimensions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "description": "Suggested axes, e.g. [\"method\",\"benchmarks\",\"key finding\",\"limitations\"]. You choose the final axes."
          }
        },
        "required": [
          "paper_ids"
        ],
        "additionalProperties": false
      }
    }
    find_connectionsAnswer

    Computes pairwise relationships between workspace papers: shared foundational references, shared authors, shared topics. Deterministic citation-graph analysis, not guesswork. Defaults to all papers.

    View tool JSON
    {
      "name": "find_connections",
      "kind": "answer",
      "impl": "imperative",
      "description": "Computes pairwise relationships between workspace papers: shared foundational references, shared authors, shared topics. Deterministic citation-graph analysis, not guesswork. Defaults to all papers.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 2,
            "maxItems": 12
          }
        },
        "additionalProperties": false
      }
    }
    identify_gapsAction

    Statistical gap analysis of the current workspace: topic frequency, co-occurrence sparsity, year and venue spread. Returns candidate gaps worth a targeted follow-up search.

    View tool JSON
    {
      "name": "identify_gaps",
      "kind": "act",
      "impl": "imperative",
      "description": "Statistical gap analysis of the current workspace: topic frequency, co-occurrence sparsity, year and venue spread. Returns candidate gaps worth a targeted follow-up search.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    draft_related_workAction

    Gathers every paper and note in a section (default: all) as ground-truth material for writing a cited related-work section. Write the prose from ONLY this material, then publish with save_artifact (kind: "draft").

    View tool JSON
    {
      "name": "draft_related_work",
      "kind": "act",
      "impl": "imperative",
      "description": "Gathers every paper and note in a section (default: all) as ground-truth material for writing a cited related-work section. Write the prose from ONLY this material, then publish with save_artifact (kind: \"draft\").",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "description": "Section title or id. Defaults to all sections."
          },
          "style": {
            "type": "string",
            "enum": [
              "related-work",
              "survey",
              "blog"
            ],
            "description": "Default related-work."
          },
          "max_papers": {
            "type": "integer",
            "minimum": 2,
            "maximum": 20
          }
        },
        "additionalProperties": false
      }
    }
    save_artifactAction

    Publish markdown you wrote (comparison table, gap analysis, related-work draft) as an artifact on the canvas. The human sees it immediately, can edit it, and can inspect which tool calls produced it. To revise an existing artifact after the human edits it: get_artifact first, incorporate their changes, then call this again with the same artifact_id.

    View tool JSON
    {
      "name": "save_artifact",
      "kind": "act",
      "impl": "imperative",
      "description": "Publish markdown you wrote (comparison table, gap analysis, related-work draft) as an artifact on the canvas. The human sees it immediately, can edit it, and can inspect which tool calls produced it. To revise an existing artifact after the human edits it: get_artifact first, incorporate their changes, then call this again with the same artifact_id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "artifact_id": {
            "type": "string",
            "description": "To UPDATE an existing artifact in place (preserving its position); omit to create a new one."
          },
          "kind": {
            "type": "string",
            "enum": [
              "comparison",
              "gaps",
              "draft",
              "summary"
            ]
          },
          "title": {
            "type": "string",
            "maxLength": 120
          },
          "markdown": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Paper ids the content is grounded in."
          }
        },
        "required": [
          "kind",
          "title",
          "markdown"
        ],
        "additionalProperties": false
      }
    }
    suggest_relatedAction

    Given a seed paper (default: most recently added), suggest related work — Semantic Scholar recommendations when available, OpenAlex relatedness + citations otherwise — excluding anything already in the workspace. Suggestions are staged in the Inbox (a new staging replaces the previous one).

    View tool JSON
    {
      "name": "suggest_related",
      "kind": "act",
      "impl": "imperative",
      "description": "Given a seed paper (default: most recently added), suggest related work — Semantic Scholar recommendations when available, OpenAlex relatedness + citations otherwise — excluding anything already in the workspace. Suggestions are staged in the Inbox (a new staging replaces the previous one).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paper_id": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          }
        },
        "additionalProperties": false
      }
    }
    export_workspaceAction

    Export the full workspace as markdown (survey skeleton with notes and artifacts), BibTeX, or JSON. JSON is the shareable snapshot (activity log excluded). Large exports are truncated in the result — the human can always download the full file from the Export menu.

    View tool JSON
    {
      "name": "export_workspace",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the full workspace as markdown (survey skeleton with notes and artifacts), BibTeX, or JSON. JSON is the shareable snapshot (activity log excluded). Large exports are truncated in the result — the human can always download the full file from the Export menu.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "markdown",
              "bibtex",
              "json"
            ]
          }
        },
        "additionalProperties": false
      }
    }