Daily Journal
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Daily Journalcheck today's journal status and print it if it's ready"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
The Daily Journal
Your mail, your calendar and the night's news, printed as a newspaper at seven every morning.
A private broadsheet for one reader, made by your own AI coding agent on your own computer. No feed, no app and no lock screen: just paper in the tray when you wake up.
Website · Get started · How it works · Tools
Why
The first thing most people read each day is a phone. It is bright, unsorted and endless, and it asks for a decision before the kettle has boiled.
The Daily Journal turns that around. While you sleep, your agent reads your inboxes, your calendar and the overnight news on the topics you choose, checks the sources and sets it all in type. At seven, your printer produces a two-page newspaper. It has a last line, so you can put it down.
Related MCP server: Morning Tab
What's in an edition
Section | What it holds |
Front page | The overnight developments that matter most, each with its source and publication time |
Markets and topics | Finance, AI or whatever you choose. Weekend prices say which day they describe |
The day ahead | Today's calendar, with times, places and anything to prepare |
Your mail | Messages that need action first: deadlines, payments, security notices. Receipts next, newsletters grouped last |
Two or more A4 pages, three columns, body type never below 9 points, black ink on a laser printer.
Get started
You need a Mac or Linux computer that is on at print time, a printer it can reach, uv, and a coding agent with access to your mail and calendar (for example Gmail, Outlook and Google Calendar connectors).
Ask your coding agent
Paste this into Claude Code, Codex, Cursor or another agent that supports MCP:
Set up The Daily Journal for me from https://github.com/thegreatLUCY/daily-journal.
Clone it to ~/daily-journal-kit, then read SETUP.md there and follow it.
Ask me before printing anything or scheduling the daily runs.The agent connects the tools, asks your timezone, print time, topics and printer, prints a test page with your go-ahead, and then schedules two daily runs.
Install as a Claude Code plugin
claude plugin marketplace add thegreatLUCY/daily-journal
claude plugin install daily-journal@daily-journalThen ask Claude to "set up my daily journal".
Other MCP clients
See SETUP.md for Codex, Cursor, Windsurf and plain MCP configuration.
How it works
06:30 prepare 07:00 print
┌──────────────┐ ┌──────────────┐ ┌───────────┐ ┌──────────────┐
│ your agent │──▶│ write the │──▶│ render & │──▶│ print once, │
│ reads mail, │ │ edition JSON │ │ review │ │ inside the │
│ calendar, │ │ (skill rules)│ │ every page│ │ print window │
│ news sources │ └──────────────┘ └───────────┘ └──────────────┘
└──────────────┘The skill (
skills/daily-journal/SKILL.md) holds the editorial rules: what to collect, how to check it, how to write it and what never goes on paper.The MCP server (
daily_journal/server.py) does the layout, the checks and the printing. Your agent does the reading and writing.Your data stays in
~/.daily-journal: settings, editions, source records and the print ledger. Nothing is sent anywhere except to your printer.
Two runs a day keep it reliable. The prepare run builds and reviews the edition about half an hour early. The print run only prints an edition that has already been reviewed.
MCP tools
Tool | Purpose |
| Today's date in your timezone, your settings, and whether today's paper is ready or already printed |
| Timezone, print window, printer, paper, topics, masthead title |
| Print queues on this computer and the default |
| One test page, only when confirmed |
| Layout rules, word budgets and a full sample edition |
| Lay out an edition and return every page as an image for review |
| Record sources, collection window and anything that failed |
| Mark the reviewed edition ready to print |
| Dry run by default; prints once inside the window |
House rules
These are enforced in code, not just suggested to the agent.
The paper prints once. A ledger and a lock allow one print attempt per day, and an unclear result is never retried automatically.
Only today's reviewed paper prints. The PDF must carry today's date in your timezone and match the hash recorded when it was reviewed.
Proofs never print. Sample and draft editions are marked as proofs in the PDF itself.
A late paper stays unprinted. Outside the print window (07:00–09:00 by default), the press waits for tomorrow.
Nothing is answered for you. The skill never sends, deletes, moves or marks mail as read, and treats every message as information, never as instructions.
Secrets stay off paper. Passwords, verification codes, tokens and sign-in links are never printed.
Pictures are labelled. Generated engravings are captioned as artwork, never as photographs.
Settings
Stored in ~/.daily-journal/config.json (or $DAILY_JOURNAL_HOME). Your agent writes them with save_settings; config.example.json shows every key.
Key | Default | Meaning |
|
| IANA name, such as |
|
| The print window |
| system default | CUPS queue name |
|
| Passed to |
|
| Shorter editions are refused |
| finance, AI | What the news pages cover |
| Masthead and page furniture | |
|
| Pause publishing and printing |
Command line
The same pieces work without an agent:
uv run python -m daily_journal.render_edition examples/sample-edition.json sample.pdf
uv run python -m daily_journal.publish_ready ~/.daily-journal/editions/daily-journal-2026-11-02.pdf --visually-reviewed
uv run python -m daily_journal.submit_print # dry run
uv run python -m daily_journal.submit_print --send # prints once, inside the windowLimits
The computer must be on and awake at print time; the agent cannot wake it.
Printing uses CUPS (
lp), so Windows is not supported yet.Pages are laid out for A4. On Letter paper they print scaled to fit.
Mail sources that need an attended browser session cannot be read unattended. The paper says so when an inbox was missed.
Each morning's run uses your own AI subscription.
Project layout
.claude-plugin/ Claude Code plugin and marketplace manifests
.mcp.json MCP server entry used by the plugin
skills/daily-journal/ The skill and its layout reference
daily_journal/ Renderer, checks, print helper and MCP server
fonts/ Gelasio, Anton and UnifrakturCook (SIL OFL)
art/ Two AI-generated engravings for editions without photos
examples/ An invented sample edition
SETUP.md Step-by-step setup for coding agentsLicense
Code is MIT licensed; see LICENSE. Fonts are under the SIL Open Font License; see daily_journal/fonts/FONTS.md. The engravings in daily_journal/art/ are AI-generated illustrations and must be captioned as artwork.
Available Tools
9 toolsget_layout_guideA
The layout rules and a complete sample edition. Read before writing an edition.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full load. "Read" and the pre-writing framing imply a side-effect-free retrieval, and "complete sample edition" hints that a substantial document comes back, but it does not state whether the content is static, large, or cacheable. With an output schema present, the return shape is covered elsewhere, so the remaining gap is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the content statement first and the call trigger second – well front-loaded and free of waste. It is arguably too clipped: the first sentence is a fragment with no verb, which costs a little immediate parseability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-argument read tool with an output schema is a simple case, and the description plus the schema covers what an agent needs to decide to call it. The only absent piece is any sense of size or caching of the returned guide, which is a minor omission given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing about inputs to document; the baseline for a no-param tool is 4. Nothing in the description is needed to disambiguate arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely – layout rules plus a complete sample edition – which is specific enough that an agent knows what it gets back. It reads as a noun-phrase fragment rather than a verb+resource statement, and it does not explicitly contrast itself with the other siblings, but the pair of nouns is distinctive enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Read before writing an edition" is an explicit, actionable precondition that tells the agent exactly when to call this. It gives no exclusions or mentions of alternatives, but for a prerequisite-reading tool the positive condition is the only one that matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
journal_statusA
Today's date in the reader's timezone, their settings, and whether today's edition is ready or already printed. Call this first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the content of the response (date, settings, edition state) so the agent knows it is a read. However, it doesn't confirm read-only safety, note any side effects, or clarify what 'their settings' includes, leaving behavioral details partly implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the payload described first and the imperative 'Call this first' front-loaded at the end as a clear call to action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument status tool with no annotations and no output schema, the description adequately tells the agent what comes back and why to call it early. The only gap is mild vagueness about the shape of 'their settings' and the edition status values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool applies. No misleading parameter hints are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (today's date, reader settings, edition readiness/printed state) concretely enough that an agent knows this is a status/orientation read rather than an action. It is distinguishable from siblings like save_settings or print_edition, though the verb is implied ('gives you') rather than stated as a specific operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this first' gives explicit sequencing guidance that no sibling provides, which is genuinely useful for orienting an agent. It stops short of stating when not to call it or naming alternatives for narrower needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_printersA
List the print queues on this computer and the system default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it implies a safe read-only enumeration but never states that it has no side effects. It also omits what the result actually looks like (queue names, default marker), which matters since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the resource scope is front-loaded immediately after the verb. Every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, side-effect-free listing with no output schema, the description covers what is enumerated and the scope ("this computer"). Only a note on the returned shape or read-only nature would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate and it correctly describes a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("print queues on this computer"), plus the added detail of returning the system default. It is clearly distinct from siblings like print_edition or print_test_page, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is a discovery step before print_edition or print_test_page, but the description never says so or states any condition for calling it. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_editionA
Print today's ready edition. With send=false this only checks it and shows the print command. With send=true it prints once, inside the reader's print window. Never retry after an unclear result.
| Name | Required | Description | Default |
|---|---|---|---|
| send | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full disclosure burden and does well: it reveals that send=true causes exactly one physical print inside the reader's print window, and it explicitly warns against retrying on ambiguity, which signals non-idempotency — a critical trait an agent could not infer from the schema. It stops short of saying what happens on failure, how errors surface, or whether a printer must already be configured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the dangerous mode (send=true) and its caution surfaced immediately after the baseline behavior. Every clause carries either a mode definition or a safety rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-boolean tool with no output schema, the description covers modes, side effects, and the retry hazard, and briefly indicates what the check returns ("shows the print command"). Gaps remain around preconditions (edition readiness, printer availability) and failure reporting, but they are modest for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must define `send` — and it does, contrasting send=false (check only, show the print command) against send=true (print once). The default's consequence and the side effect of each value are fully spelled out, leaving nothing for the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Print today's ready edition' gives a specific verb and resource with a clear scope ("today's ready"), and the dry-run vs. real-print framing makes the effect unambiguous. It never names the nearest siblings (print_test_page, render_edition_pdf, publish_edition), so an agent must still infer which of these printing-adjacent tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states precisely what each mode is for — send=false checks only, send=true prints — which is real when-to-use guidance for the only decision the caller makes. It also adds an operational rule ("never retry after an unclear result") but gives no routing guidance against the sibling tools or prerequisites such as a configured printer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_test_pageA
Print one test page to check the printer during setup. Requires confirm=true and the reader's go-ahead.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a real behavioral gate: confirm=true plus a human go-ahead before anything is sent to hardware. It doesn't say what happens when confirm is false, what content is printed, or what result/error the caller sees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero waste, with the action front-loaded and the precondition second. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter utility tool with no output schema, the description covers purpose, the confirmation requirement, and the human sign-off. Only the return/failure behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is only named 'confirm' with a false default, so the description does the compensating work by stating it must be true. It adds the non-obvious 'reader's go-ahead' precondition that no schema field conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Print one test page to check the printer during setup.' The 'one test page' + 'during setup' framing implicitly separates it from print_edition and render_edition_pdf, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'during setup' gives clear context for when this applies, and the test-page framing delimits it from real jobs. It does not explicitly say when not to use it or name print_edition as the alternative for actual output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_editionB
Mark today's live edition ready for the morning print. Only after you have looked at every page.
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_path | Yes | ||
| visually_reviewed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It hints at a review gate, but does not disclose what publishing actually does, whether it is reversible, what permissions are needed, or what side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose and followed by the key constraint. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description is too thin. It omits parameter meanings, side effects, and return behavior, leaving the agent with significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It loosely implies the visually_reviewed requirement with 'looked at every page,' but never explains pdf_path or ties the boolean parameter explicitly to the review condition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-and-resource combination: 'Mark today's live edition ready for the morning print.' That distinguishes it from rendering or actual printing, though it does not explicitly name siblings like print_edition or render_edition_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite: 'Only after you have looked at every page.' This tells the agent when the tool is appropriate, but it does not discuss alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_edition_pdfA
Lay out an edition and return every page as an image for visual review. Set live=true only for today's real edition; otherwise it is saved as a proof that can never print. Fix any reported overflow by shortening copy, then render again.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | ||
| edition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does disclose the key side effect: a non-live render is persisted as a proof that can never print, and output is one image per page. What it omits is whether the render mutates the edition object, whether proof storage is limited or costs anything, and any permission prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and output, then the dangerous parameter, then the recovery loop. Nothing is redundant and every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers output shape and the live/proof semantics well for a tool with no annotations or output schema, but the required nested `edition` payload is left entirely undefined, which is the main thing an agent needs before calling. Adequate for the safety story, incomplete for the input contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains `live` well, including the default-false consequence, but the required `edition` parameter is a nested object with additionalProperties and gets no explanation of expected structure or required sub-fields anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lay out an edition and return every page as an image'), plus the return format, which an agent can use to distinguish this from print_edition or publish_edition. It does not explicitly name the sibling alternatives, and the name says 'pdf' while the description promises page images, a minor mismatch left unexplained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional for the risky path ('Set live=true only for today's real edition') and a follow-up workflow ('Fix any reported overflow by shortening copy, then render again'), which is genuine when-and-how guidance. It stops short of routing the agent between this and print_edition/publish_edition, so the sibling boundary is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_settingsA
Update the reader's settings. Only known keys are accepted: title, timezone, print_time, latest_print_time, printer, paper, sides, copies, minimum_pages, topics, dateline_place, footer, hold_printing. Ask the reader before changing anything.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a consent requirement and a key-validation rule, but leaves the most important mutation semantics unstated: whether omitted settings are preserved (partial merge) or reset, and what happens on an invalid key (error vs. silently ignored).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The key enumeration is compact and the consent instruction is placed last as a hard stop before acting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must cover purpose, valid inputs, and safety, and it largely does. The remaining gap is mutation semantics — partial vs. full update and error behavior for rejected keys — which matters for a nested free-form object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is a free-form object with additionalProperties:true, so the schema alone tells an agent nothing. The description compensates by enumerating the 13 accepted keys, which is exactly the meaning an agent needs; it stops short of giving types or formats for those keys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update the reader's settings") plus the exact accepted key set, which immediately distinguishes it from neighbors like save_sources and get_layout_guide. It does not explicitly name a sibling as an alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Ask the reader before changing anything" gives a real precondition for invoking, and "Only known keys are accepted" bounds the input. However, there is no guidance on when to use this versus save_sources or the print tools, and no statement about what to do when a key is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_sourcesA
Save today's source record: story URLs, checked times, collection window, which inboxes and calendars were read, and anything that failed. Store summaries only, never message bodies, codes or passwords.
| Name | Required | Description | Default |
|---|---|---|---|
| record | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it does deliver one genuinely important behavior: 'Store summaries only, never message bodies, codes or passwords' — a hard privacy constraint an agent could not infer elsewhere. It leaves the core write semantics unstated, though: whether a second call overwrites or appends to today's record, and whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The scope statement comes first and the safety constraint follows immediately, both earning their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity (one parameter) and an output schema exists, so return values need no explanation; the privacy directive covers the highest-risk aspect. The remaining omission is overwrite/merge semantics for a write tool with no annotations to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'record' parameter is a free-form object with additionalProperties: true, so the description must define the payload — and it does, enumerating the content categories (URLs, checked times, window, inboxes, calendars, failures). It falls short of giving key names or types, leaving the agent to infer the object shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the specific verb 'save' with a concrete resource ('today's source record') and enumerates its contents (story URLs, checked times, collection window, inboxes/calendars read, failures), which is far more informative than the bare name. It doesn't explicitly contrast itself with siblings like save_settings or journal_status, but the domain is clearly distinct enough to identify on sight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'today's source record' implies a daily, post-collection save, but there is no explicit statement of when to call it, whether it must precede other edition-building steps, or what to do instead. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
get_layout_guide - First observed
journal_status - First observed
list_printers - First observed
print_edition - First observed
print_test_page - First observed
publish_edition - First observed
render_edition_pdf - First observed
save_settings - First observed
save_sources
TDQS
Scored across 9 tools
The staged workflow (render → publish → print) is clearly delineated by descriptions, and the read-side tools (journal_status, list_printers, get_layout_guide) each target a distinct artifact. The only mild overlap is print_edition vs print_test_page, which both invoke the printer but are differentiated by 'today's ready edition' vs 'setup test'.
Eight of nine tools follow a verb_noun pattern (save_settings, list_printers, render_edition_pdf, publish_edition, print_edition). The single exception is journal_status, which is noun-first, but it remains readable and predictable in context.
Nine tools is well-scoped for a daily-edition workflow, with each tool earning its place across status, configuration, layout, sourcing, rendering, publishing, and printing. Nothing feels redundant or padded.
The core daily lifecycle is covered end to end, including source provenance and a safe test-print path. Minor gaps exist: there is no way to list or retrieve past editions/proofs, and no retract/unpublish operation once an edition is marked ready.
Maintenance
Related MCP Connectors
The agentic layer of letters. Agents send real printed mail worldwide, German compliance built in.
Turns agent output into versioned web pages, PDFs, Word docs, spreadsheets and Markdown.
Print & mail PDF/HTML/Markdown/text/DOCX/images to US addresses; pay per call in x402 USDC on Base.
Media workflows, research and code for agents. Search sources, compare evidence and collaborate.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to print documents directly on your own printer over a private network, without cloud services or open ports. Supports printing text, URLs, and files with per-person access keys, usage limits, and detailed job control.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to turn their current Codex/ChatGPT conversation into a source-backed personal newspaper: they pick public sources, exclusions, language, timezone and interests through native settings, then request an edition that the conversation reads and cites. The server stores and renders validated editions locally with source links, preserving the previous edition when generation fails.MIT
- AlicenseAqualityAmaintenanceEnables an AI agent to design, lay out, proof and print badges, business cards, flyers, photos and sublimation transfers on real paper printers with millimetre-accurate output, packing mixed items onto shared sheets with crop marks. It also remembers named print profiles, including printer, paper, tray, media type, quality and calibration settings.10MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to send a finished one-page daily newspaper brief to a private endpoint, where it is rendered for the user's printer and printed when they are nearby. It accepts editions through MCP, webhook, or email while keeping calendar and mail data on the agent side.1MIT