Marketplace / Documents

PDF

PDF lays out a source the person names (a doc, a plan, notes or markdown) as a PDF and stores it in the workspace.

  • Saves one file
  • Models via ContextStream
  • Reads docs
  • Reads tasks, plans

What it does

Makes a PDF from a doc, a plan, notes or markdown in the workspace, with contents, bookmarks and links, and stores it as media.

What it does not do

It does not do these. A task like them is declined, and a declined run is free:

  • Summarising, translating, rewriting or adding to the source: every word in the PDF is the source's.
  • Making a PDF from a web page, an image or a file outside ContextStream.
  • Editing an existing PDF, filling in a form or signing it.
  • Sending or sharing the PDF: it is stored as media for the person to use.

Real runs

What PDF did with a real input: the input, the result (shortened where it is long), how long it took, what it cost, and where it ran. Each live run used public or demo material only. An example marked as from the eval suite is not a live run.

Live run on ContextStream’s task rail

The public README of an MCP server, as a PDF

Agent
pdf@0.1.0
Outcome
succeeded
Ran
2026-10-27 17:23 UTC
Took
21.4 s
Cost
600 credits

ContextStream's Demos workspace; the source is the README.md of the public repository github.com/contextstream/mcp-server at v1.0.34, passed in as markdown.

Input
{
  "markdown": "<!-- mcp-name: io.github.contextstream/mcp-server -->\n\n<p align=\"center\">\n  <img src=\"assets/contextstream-logo.png\" alt=\"ContextStream\" width=\"64\" />\n</p>\n\n<h1 align=\"center\">ContextStream MCP Server</h1>\n\n<p align=\"center\"><strong>Persistent memory. Millisecond code search.</strong></p>\n\n## Your agent knows code. Give it the decisions behind yours.\n\nConnect your code, docs, and conversations so your agents can find the right\nfiles, recall saved decisions, and build on past work across sessions and tools.\n\n<a id=\"install-in-30-seconds\"></a>\n\n## Start free with MCP\n\n**10,000 monthly credits.\n…",
  "title": "ContextStream MCP Server: README",
  "paper": "a4"
}

Result

Made "ContextStream MCP Server: README", a 5-page PDF of the markdown given with contents, and stored it as media.

Result

ContextStream MCP Server: README: 5 pages, 16190 bytes, 100% of the source's words read back out of the PDF.

Contents

SectionPage
Your agent knows code. Give it the decisions behind yours.2
Start free with MCP2
Make the next session useful2
Slipstream agents2
Proof and data controls3
npm (Node.js 20+)3
Hosted MCP without a local process3
Preview or diagnose setup3
Scripted and CI setup4
Package Bouncer (opt-in)4
Open source and contributing4
Optional deep project learning5
Checks: 4 of 5 passed
  • Passed: source_read: 7533 characters in 13 part(s).
  • Did not pass: structure: The model could not be reached (timeout), so the source keeps its own structure.
  • Passed: text_recall: 1190 of 1190 source words read back out of the PDF (100.0%).
  • Passed: characters: Every character is printable in the standard fonts.
  • Passed: stored: Stored as media f1b4b409-e712-4eac-b90c-1abf42dc0922 (stored).
  • The input's markdown is the whole README; it is shortened here.
  • The structure check failed: the model call that arranges sections timed out, so the PDF keeps the README's own headings. Every word of the source is in the PDF.

Provenance

Task
8c350f73-dafe-4e4f-848a-b45915de1758
Charged
0: it ran on ContextStream’s own account, which is not billed; a customer pays the price shown

Example inputs

Inputs from the agent’s own job contract, each checked against its input schema.

The doc as a PDF, titled and sectioned as the doc is.

{
  "doc_id": "00000000-0000-4000-8000-0000000000d1"
}
ss run pdf doc_id=00000000-0000-4000-8000-0000000000d1

The plan with its steps and a table of its tasks, on US letter paper.

{
  "plan_id": "00000000-0000-4000-8000-0000000000a2",
  "paper": "letter"
}
ss run pdf plan_id=00000000-0000-4000-8000-0000000000a2 paper=letter

Notes the person pasted, under their own title.

{
  "markdown": "# Standup notes\n\n- Shipped the importer\n- Next: billing",
  "title": "Standup, 17 October"
}
ss run pdf markdown='# Standup notes

- Shipped the importer
- Next: billing' title='Standup, 17 October'

Declined: PDF prints the source as it is and does not summarise it.

{
  "doc_title": "Q3 report",
  "instructions": "summarise it in one page"
}
ss run pdf doc_title='Q3 report' instructions='summarise it in one page'

Input

FieldTypeWhat it is
doc_idstringA ContextStream doc to make the PDF from.
doc_titlestringA ContextStream doc to make the PDF from, by its title.
plan_idstringA ContextStream plan to make the PDF from, with its steps and tasks.
markdownstringMarkdown to make the PDF from: notes, a Lens result, anything written down.
titlestringThe PDF's title. Defaults to the source's own title.
instructionsstringHow to arrange it, for example "one section per phase" or "put the open questions first".
paper"a4" | "letter"Paper size: a4 (the default) or letter.
tocbooleanAdd a table of contents, or leave it out. Left unset, long documents get one.
project_idstringStore the PDF in this project instead of the source's.

Where it runs

Model agent. A program on ContextStream’s model proxy, with a short-lived token that acts for you in one workspace.

It may run for up to 1 min before it is stopped.

ContextStream scopeWhat it lets a run do
docs.readRead a doc by id, or find one by its exact title.
items.readList todos, plans and their tasks, tasks and reminders.
media.writeStore one file the agent made per run, recorded as the agent’s.
model.invokeCall models through ContextStream’s model proxy, under the run’s credit cap.

Evals

11 of 11 offline eval cases pass for version 0.1.0 (baseline saved 2026-10-18). Offline means fakes and fixtures, with no network: the cases check what the agent guarantees, such as declining work that is not its job. They are not measurements of live runs; the live runs above are.