Skip to main content
Glama

Notes Studio

notes_studio

Make Notes in QVN: the knowledge bank, note formulas and AI generation. Writes QVN only, never Substack, except legacy_create with planned_date, which also makes a Substack draft. To publish, use substack_write. Actions: search_knowledge_bank, formula_recommendations, generate (typical order), posting_formats (how to compose and post a note), hooks (opening lines, 10 per call); legacy_create, legacy_update, legacy_mark_published, legacy_dashboard, legacy_list_unscheduled (QVN draft database; being phased out; use the QVN note ID, not a Substack ID). Call action help for parameters.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>"
    },
    "name": "notes_studio"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNosearch_knowledge_bank: max results, default 20, max 50. legacy_list_unscheduled: default 30, max 100. Checked per action, server side.
queryNosearch_knowledge_bank: keyword search across extracted content. Omit to browse all.
actionYesThe operation to perform. Current actions: search_knowledge_bank, formula_recommendations, generate, posting_formats, hooks, legacy_create, legacy_update, legacy_mark_published, legacy_dashboard, legacy_list_unscheduled. Pass "help" for the live list with parameters; actions added after you connected appear there and work without reconnecting.
offsetNohooks: pagination offset. Returns 10 hooks per call; for more, call again with offset += 10.
contentNolegacy_create, legacy_update: HTML content. Supported tags: <p>, <strong>, <em>, <code>, <pre>, <blockquote>, <ul>, <ol>, <a>. @mentions in text are matched automatically. Do NOT use markdown.
note_idNoQVN note ID (NOT a Substack note ID). Required for legacy_update, legacy_mark_published.
optionsNoExtra parameters for an action whose params are not listed in this schema (see action "help"). Parameters that ARE listed in this schema must be passed at top level; here they are ignored.
categoryNolegacy_create, legacy_update: note category, one of Educational, Personal, Provoking, Question, Data, Entertaining, Useful Notes. hooks: filter the hook library by category (partial match); omit for all.
mentionsNolegacy_create, legacy_update: people to @mention. Put @Label in the HTML content and the matching {id, label} here.
note_urlNolegacy_mark_published: Substack URL of the published note (e.g. "https://substack.com/@handle/note/c-123456").
formula_idNogenerate: optional formula ID (from formula_recommendations). Auto-selected if omitted.
content_typeNolegacy_create: "thought", "story", "data", or null. search_knowledge_bank, formula_recommendations: filter by content type (diagnostic, wisdom, contrarian, conditional_advice, metaphor, data_insight, framework, personal_story).
formula_usedNolegacy_create: formula template name used (e.g. "pattern_reveal", "resource_list").
planned_dateNolegacy_create only: ISO datetime in UTC, e.g. "2026-02-15T15:23:00". Must be in the future. Also auto-creates a native Substack draft.
planned_daysNolegacy_dashboard: days forward to look for planned notes. Default 30.
article_titleNolegacy_create, legacy_update: source article title.
attachment_urlNolegacy_create, legacy_update: article URL(s) to attach. Comma-separated, max 6, max 1000 chars. Pass empty string to clear.
extraction_idsNogenerate: IDs of extracted content items to use (1–5, from search_knowledge_bank results).
published_daysNolegacy_dashboard: days back to look for published notes. Default 30.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false, destructive=false, openWorld=false; the description adds materially more, notably that legacy_create with planned_date auto-creates a Substack draft, which is a side effect outside the stated QVN-only boundary. It also discloses the legacy_* deprecation status and the 10-hooks-per-call granularity. It does not mention cost or latency of the AI 'generate' action, nor what legacy_update overwrites, which are the remaining behavioral unknowns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense and front-loaded: the write-scope constraint comes first, then the action inventory, then the routing rule. The semicolon-compressed action list is efficient given ten actions, though the mix of prose and parenthetical glosses makes it slightly harder to scan than a clean list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter, 10-action dispatcher with no output schema, it covers scope, sibling routing, deprecation, and the one surprising side effect, which is most of what an agent needs to choose correctly. The gap is that half the actions are named without any explanation of what they return or require, and 'Call action `help` for parameters' defers discovery to runtime rather than documenting it here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including per-action applicability of limit, category, and content_type. The description adds little parameter-level detail beyond reinforcing 'use the QVN note ID, not a Substack ID' and deferring unlisted parameters to action `help`. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: notes in QVN covering the knowledge bank, formulas, and AI generation, and it explicitly bounds the write target ('Writes QVN only, never Substack'). It also names the sibling for the adjacent job ('To publish, use substack_write'), so an agent can separate it from substack_write without opening the schema. The only weakness is that 'Make Notes' undersells the read-oriented actions (search_knowledge_bank, hooks, posting_formats), which the action list then has to correct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete routing: publishing goes to substack_write, the legacy_* actions are a QVN draft database 'being phased out', and the parentheticals assign jobs ('posting_formats (how to compose and post a note)', 'hooks (opening lines, 10 per call)'). It also sequences actions with 'generate (typical order)'. It stops short of saying when to prefer search_knowledge_bank over hooks or formula_recommendations, so the choice among the non-legacy actions is left partly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources