Get Passage (Research)
researchmcp-research_get_chunk
Fetch a single text chunk by its stable id.
Use after research_chunk_search when you have a chunk_id and want the
chunk back without re-running a search. Cheap direct id lookup.
chunk_id is an opaque id assigned when the chunk is indexed. It round-trips reliably
within a session (search -> get). It is NOT durable across re-ingestion:
the hourly cron deletes a report's docs and re-inserts them with new ids
when the report is modified, so a chunk_id obtained before reprocessing will
miss afterward. Fetch within the same session.
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
chunk_id | string | yes | — | The chunk_id returned by a previous research_chunk_search call. |
Returns
- On hit: {"result": {"chunk": {report_id, title, date, score, text, chunk_id}}}.
- On miss: {"result": {"chunk": None}}. Not an error.
- On retrieval failure: {"error": {code, message}}
codeisupstream_unavailable,internal(our own bad- data; a retry returns the same error), or
not_entitled(authorization - refused).
- The
scorefield is 0.0 for direct id lookups (no relevance ranking applies). - No
tagshere, unlike a search hit: the chunk search that gave you this chunk_idalready returned the report's taxonomy tags. If you need the- audience/season of the parent report and no longer have them, call
research_get_report(report_id).
Try it
Loading interactive widget…
Code examples
- curl
- TypeScript
- Python
curl -s https://mcp.edited.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-06-18" \
-H "x-api-key: $MCP_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "researchmcp-research_get_chunk",
"arguments": {
"chunk_id": "example"
}
}
}'
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = new Client({ name: "demo", version: "1.0.0" }, { capabilities: {} });
await client.connect(
new StreamableHTTPClientTransport(new URL("https://mcp.edited.com/mcp"), {
requestInit: { headers: { "x-api-key": process.env.MCP_API_KEY ?? "" } },
}),
);
const result = await client.callTool({
name: "researchmcp-research_get_chunk",
arguments: {
"chunk_id": "example"
},
});
import os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
headers = {"x-api-key": os.environ["MCP_API_KEY"]}
async with streamablehttp_client("https://mcp.edited.com/mcp", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool(
"researchmcp-research_get_chunk",
{"chunk_id": "example"},
)
Input schema
{
"type": "object",
"properties": {
"chunk_id": {
"description": "The chunk_id returned by a previous research_chunk_search call.",
"minLength": 1,
"type": "string"
}
},
"required": [
"chunk_id"
]
}
Output schema
Describes both branches of the envelope — result on success, error on a refusal. Validate against this rather than pattern-matching the prose above; see Concepts → Response shape.
{
"type": "object",
"properties": {
"result": {
"properties": {
"chunk": {
"anyOf": [
{
"properties": {
"report_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"date": {
"format": "date",
"type": "string"
},
"score": {
"type": "number"
},
"text": {
"type": "string"
},
"chunk_id": {
"type": "string"
}
},
"required": [
"report_id",
"title",
"date",
"score",
"text",
"chunk_id"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"chunk"
],
"type": "object"
},
"error": {
"type": "object",
"description": "Present instead of `result` when the call was rejected. Branch on `code`; never string-match `message`.",
"properties": {
"code": {
"type": "string",
"enum": [
"invalid_input",
"not_entitled",
"upstream_unavailable",
"internal"
]
},
"message": {
"type": "string"
},
"field": {
"type": "string",
"description": "Offending parameter, when the failure is attributable to one."
},
"details": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"code",
"message"
]
}
},
"oneOf": [
{
"required": [
"result"
]
},
{
"required": [
"error"
]
}
],
"x-fastmcp-wrap-result": true
}