Scrapbox Cosense MCP Server
An MCP server for Cosense (formerly Scrapbox) that lets an AI agent read, search, create, and edit wiki pages.
Read pages: fetch a page's content, metadata, and linked pages (
get_page)Browse pages: list pages sorted by updated/created/accessed/linked/views/title with pagination up to 1000 (
list_pages)Search content: full-text search with keyword, AND, exclude, and exact-phrase queries, max 100 results (
search_pages)Create pages: make a new page from Markdown (auto-converted) or raw Scrapbox syntax, or just get the creation URL (
create_page)Get URLs: generate a direct link to any page (
get_page_url)Context gathering: retrieve a page plus its 1-hop/2-hop linked pages in AI-optimized format (
get_smart_context)Insert lines: add text after a matched line, falling back to appending at page end (
insert_lines)Edit lines: replace exact-match line(s) or contiguous multi-line blocks, first match or all via
matchAll(edit_lines)Delete lines: remove exact-match line(s) or blocks, refusing to delete the title line (
delete_lines)Multi-project support: target other projects via a
projectNameargument on every tool
Note: whole-page delete_page and rewrite_page exist in the project but are opt-in and not registered in this schema.
Provides access to Scrapbox/Cosense pages, allowing retrieval of page content, metadata, links, and editor information, listing pages in a project, full-text search across pages, and generating page URLs.
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., "@Scrapbox Cosense MCP Serversearch for pages about JavaScript tutorials"
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.
scrapbox-cosense-mcp
Overview
MCP server for Cosense (formerly Scrapbox).
Tool | Description | Auth Required |
| Get page content, metadata, and links | For private projects |
| Browse pages with sorting and pagination (max 1000) | For private projects |
| Full-text search with keyword highlighting (max 100 results) | For private projects |
| Create a page with a Markdown/Scrapbox body | Yes |
| Generate direct URL for a page | No |
| Insert text after a specified line in a page | Yes |
| Replace exact-match line(s), including a multi-line block (first match, or all with | Yes |
| Delete exact-match line(s), including a multi-line block (first match, or all with | Yes |
| Delete a page — opt-in, see below | Yes |
| Replace a page's entire content — opt-in, see below | Yes |
| Get a page and its linked pages (1-hop/2-hop) in AI-optimized format | Yes |
create_page, insert_lines, edit_lines, and rewrite_page support a format parameter ("markdown" or "scrapbox") to control content conversion.
edit_lines replaces only the first matching line by default. Set matchAll: true to replace every occurrence. The default is deliberately conservative: a line such as a bullet marker or a blank line can repeat many times in a page, and replacing all of them at once is rarely what the caller intended.
targetLineText may contain newlines to match a contiguous block of lines. The block is replaced as a whole, so n lines can become m lines (for example, collapsing several lines into one). Block matches with matchAll: true are non-overlapping.
delete_lines uses the same exact-match (and block) semantics but removes the matched lines instead of replacing them. It refuses to delete the title line (the first line), because that would rename or remove the page itself — use delete_page for that.
delete_page and rewrite_page are opt-in
delete_page and rewrite_page are not registered unless COSENSE_ENABLE_DELETE=true is set. Without it neither tool appears in the tool list at all, so an agent cannot call them even by mistake. This server is often added to a shared MCP configuration, so whole-page destruction is exposed only to those who deliberately turn it on.
The reasoning: insert_lines, edit_lines, and delete_lines all require an exact match, which is only possible if the caller has actually read the page — they can only destroy lines they already know. delete_page and rewrite_page act on the entire page regardless of whether the caller has read it, so they get a separate opt-in gate.
delete_page removes the whole page. There is no undo. Two further guards are built in:
The page must already exist. A missing page returns an error rather than a silent success. (The REST API returns a title line even for a page that was never created, so the check looks at
persistent, the same waycreate_pagedoes.)dryRun: truereports how many lines would be removed and shows the first five of them, without touching the page.
COSENSE_PROJECT_ALLOW_LIST limits reachable projects
Every tool accepts a projectName override, which is how one server serves several projects. A credential (a Personal Access Token or a session ID) often reaches more projects than the default one, so without a limit an agent that names the wrong project can read or write there. COSENSE_PROJECT_ALLOW_LIST is the opt-in fence: when set, only the listed projects and COSENSE_PROJECT_NAME are accepted, and anything else fails before a request is sent. Names are matched exactly, including case, so a spelling variant cannot slip through. Setting the variable to an empty value restricts to the default project alone. Unset keeps the old unrestricted behavior.
rewrite_page replaces a page's entire content (the title is preserved as the first line). It has the same guards, plus two of its own:
The page must already exist — the
persistentcheck is inverted relative tocreate_page, so a typo cannot silently create a new page.Empty content is rejected — removing a page is
delete_page's job.dryRun: truereports the before/after line counts and previews without touching the page.
rewrite_page replaces the whole page. If another edit lands while a rewrite is in flight, the rewrite re-applies on the 409 retry and the concurrent edit is lost silently.
When you run several instances of this server for different projects, set the variable on each instance that should be allowed to delete:
{
"mcpServers": {
"cosense-notes": {
"command": "npx",
"args": ["-y", "scrapbox-cosense-mcp"],
"env": {
"COSENSE_PROJECT_NAME": "notes",
"COSENSE_MCP_PAT": "your-personal-access-token",
"COSENSE_TOOL_SUFFIX": "notes",
"COSENSE_ENABLE_DELETE": "true"
}
},
"cosense-archive": {
"command": "npx",
"args": ["-y", "scrapbox-cosense-mcp"],
"env": {
"COSENSE_PROJECT_NAME": "archive",
"COSENSE_MCP_PAT": "your-personal-access-token",
"COSENSE_TOOL_SUFFIX": "archive"
}
}
}
}Here the notes instance exposes delete_page_notes, while the archive instance exposes no deletion tool at all.
Note that insert_lines and edit_lines behave differently when the target line is absent. insert_lines appends to the end of the page, because "add this text somewhere" still has a reasonable outcome. edit_lines returns an error and leaves the page untouched, because "replace this specific line" has no meaningful fallback — appending the replacement would silently produce a page the caller never asked for.
Related MCP server: scrapbox-cosense-mcp-editable
Quick Start
Desktop Extension (.mcpb) — Easiest
Download
scrapbox-cosense-mcp.mcpbfrom GitHub ReleasesDouble-click — Claude Desktop opens an install dialog
Enter your project name (and a Personal Access Token for private projects or editing)
Claude Code Plugin
Add the marketplace:
/plugin marketplace add worldnine/scrapbox-cosense-mcpInstall the plugin:
/plugin install scrapbox-cosense@worldnine-scrapbox-cosense-mcpInstalls globally by default. Use
--scope projector--scope localfor other scopes.Set environment variables in your settings file:
{ "env": { "COSENSE_PROJECT_NAME": "your_project_name", "COSENSE_MCP_PAT": "your_personal_access_token" } }File
Scope
~/.claude/settings.jsonAll projects (global)
.claude/settings.local.jsonThis project only (gitignored)
The plugin includes MCP server configuration and a /cosense skill for CLI operations.
Claude Code (Manual MCP Setup)
If you prefer manual configuration over the plugin:
claude mcp add scrapbox-cosense-mcp \
-e COSENSE_PROJECT_NAME=your_project \
-e COSENSE_MCP_PAT=your_personal_access_token \
-- npx -y scrapbox-cosense-mcpClaude Desktop / Other MCP Clients
Add to your config file:
Client | Config File |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
Cursor |
|
Windsurf |
|
{
"mcpServers": {
"scrapbox-cosense-mcp": {
"command": "npx",
"args": ["-y", "scrapbox-cosense-mcp"],
"env": {
"COSENSE_PROJECT_NAME": "your_project_name",
"COSENSE_MCP_PAT": "your_personal_access_token"
}
}
}
}Build from Source
git clone https://github.com/worldnine/scrapbox-cosense-mcp.git
cd scrapbox-cosense-mcp
npm install && npm run buildConfiguration
Required
Variable | Description |
| Your Scrapbox/Cosense project name |
Authentication
Public projects can be read without a credential. Private projects, editing, and get_smart_context need one — see Authentication.
Variable | Description |
| Personal Access Token (recommended). Issue one at |
| Session ID ( |
A Service Account access key (Business plan, starts with cs_) also goes in COSENSE_MCP_PAT.
Optional
Variable | Default | Description |
|
| API domain |
|
| Display name in tool descriptions |
|
| Initial page fetch limit (1–1000) |
|
| Initial sort: updated, created, accessed, linked, views, title |
| — | Tool name suffix for multiple instances (e.g. |
|
| Convert numbered lists to bullet lists in Markdown conversion |
|
| Exclude pinned pages from initial resource list |
|
| Register the |
| — | Comma-separated project names that |
| stdio | Set to |
|
| Port for the HTTP transport |
|
| Address the HTTP transport listens on. For anything other than localhost, also set |
| — | Comma-separated |
| — |
|
CLI Usage
The same binary also works as a standalone CLI:
scrapbox-cosense-mcp get "Page Title"
scrapbox-cosense-mcp search "keyword"
scrapbox-cosense-mcp list --sort=updated --limit=20
scrapbox-cosense-mcp create "New Page" --body="Markdown content"
scrapbox-cosense-mcp insert "Page" --after="target line" --text="new text"
scrapbox-cosense-mcp edit "Page" --target="old line" --text="new text"
scrapbox-cosense-mcp delete-lines "Page" --target="old line"
scrapbox-cosense-mcp delete "Page" --dry-run # needs COSENSE_ENABLE_DELETE=true
scrapbox-cosense-mcp rewrite "Page" --body="new content" --dry-run # needs COSENSE_ENABLE_DELETE=true
scrapbox-cosense-mcp url "Page Title"Flag | Description |
| Token-efficient compact output (recommended for AI agents) |
| Override project name |
| Output as JSON |
| Show help (supports |
Multiple Projects
All tools accept an optional projectName parameter to target a different project from a single server. For multiple private projects with different credentials, run separate server instances with COSENSE_TOOL_SUFFIX.
To limit which projects an agent can reach, set COSENSE_PROJECT_ALLOW_LIST (comma-separated). Requests naming any other project are rejected before any API call, and the error lists the permitted projects. Matching is case-sensitive.
See docs/multiple-projects.md for detailed configuration examples.
Development
Command | Description |
| Build (TypeScript → JavaScript) |
| Auto-rebuild during development |
| Run test suite |
| Run ESLint |
| Debug with MCP Inspector |
Contributing
Create a feature branch from
mainAdd tests for your changes
Run
npm run lint && npm testCreate a pull request — CI runs automatically
Contributors
Thanks to everyone who has contributed to this project:
@kmatsunami — undefined collaborators handling in
get_page, JSR dependency resolution (#20)@vitalibondar —
formatparameter, bare URL doubling fix (#29)@punkpeye, @lwsinclair — README badges (#1, #6)
The full list is on the contributors graph.
License
MIT
Available Tools
9 toolscreate_pageB
Create a new page in Scrapbox project on cosense (scrapbox). Creates a new page with the specified title and optional body text. Returns the page creation URL without opening browser. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Content in markdown format (default) or Scrapbox syntax (when format is 'scrapbox'). Avoid duplicating the title in the body since it's automatically displayed at the top. Supports links, code blocks, lists, and emphasis. | |
| title | Yes | Title of the new page | |
| format | No | Content format of the body. 'markdown' (default) converts Markdown to Scrapbox syntax. 'scrapbox' passes content through as-is, preserving Scrapbox-native indentation and syntax. | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. | |
| createActually | No | Whether to actually create the page. If true (default), creates the page immediately. If false, returns only the creation URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It usefully discloses that the tool returns a creation URL without opening a browser and that projectName defaults to 'my-cosense-project'. However, it omits key mutation traits such as auth requirements and, importantly, what happens when the page already exists (overwrite vs error).
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?
Four sentences, front-loaded with the core action and closing with the most actionable constraint (default project). Slightly redundant phrasing ('Scrapbox project on cosense (scrapbox)') but no filler sentences.
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 exists, and the description does address the return value (creation URL). For a mutation tool with no annotations, it is adequate but incomplete, missing auth/permission context and duplicate-page behavior that an agent needs before invoking a write operation.
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 100%, so the schema already documents all five parameters thoroughly, including the markdown/scrapbox format semantics and createActually behavior. The description reinforces title/body/projectName defaults but adds no syntax or meaning beyond the schema, so the baseline 3 applies.
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 gives a clear verb+resource ('Create a new page in Scrapbox project on cosense') and states scope (title + optional body). It distinguishes the tool's core action from read-only siblings like get_page, though it never explicitly names the mutation alternatives (edit_lines, insert_lines).
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 explains the default project behavior but offers no guidance on when to use create_page versus editing existing content with edit_lines or insert_lines. There is no when-not or alternative routing, leaving the agent to infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_linesA
Delete one or more lines from a Scrapbox page on cosense (scrapbox). Matches the target by exact text. If targetLineText contains newline characters, it is matched as a contiguous block of lines and removed as a whole. By default only the first match is removed; set matchAll to remove every (non-overlapping) occurrence. Refuses to delete the title line (the first line), which would rename or remove the page — use delete_page for that. Returns an error if no match is found. Requires COSENSE_MCP_PAT or COSENSE_SID. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| matchAll | No | If true, delete every occurrence of the target (a single line or a contiguous block). Block matches are non-overlapping. The operation is atomic: if any match includes the title line, the whole call is refused. Defaults to false (delete only the first match). | |
| pageTitle | Yes | Title of the page to modify | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. | |
| targetLineText | Yes | Exact text of the line(s) to delete. Matching is case-sensitive and requires full-line exact matches. If it contains newline characters, the consecutive lines are matched as a contiguous block and removed as a whole. |
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 so well: it discloses exact-text matching semantics, newline block matching, the matchAll atomicity/refusal rule, the title-line guard, the no-match error, and the required credential (COSENSE_MCP_PAT or COSENSE_SID). Only the success return payload goes unstated, which is minor for a delete tool.
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?
Front-loaded with the action, then ordered by importance: matching semantics, matchAll, the title-line guard, error behavior, auth, default project. Every sentence carries information, though the trailing default-project sentence duplicates the schema and could be dropped.
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 annotations and no output schema, and the description still covers auth, defaults, edge cases, refusal behavior, and error signaling — enough for correct invocation. It stops short of describing what a successful call returns or whether deleted content is recoverable, which is the remaining gap given there is no output schema.
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 100%, so the schema already documents all four parameters including the matchAll atomicity rule and the projectName default; the baseline is 3. The description mostly restates those defaults ('my-cosense-project', first-match default) rather than adding new parameter semantics.
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 — 'Delete one or more lines from a Scrapbox page' — and immediately distinguishes itself from the closest-looking sibling by noting it refuses the title line and that delete_page is the tool for page removal. An agent can tell delete_lines apart from delete_page and edit_lines without opening any schema.
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 explicit conditional guidance: default behavior deletes only the first match, matchAll deletes every non-overlapping occurrence, title-line targets are refused and should route to delete_page instead. It also states the failure condition ('Returns an error if no match is found'), so the agent knows both the selection condition and the exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_linesA
Replace one or more lines in a Scrapbox page on cosense (scrapbox). Matches the target by exact text and substitutes it with new content (which may span multiple lines). If targetLineText contains newline characters, it is matched as a contiguous block of lines, so any n lines can be replaced with m lines. By default only the first match is replaced; set matchAll to replace every (non-overlapping) occurrence. Returns an error if no match is found. Requires COSENSE_MCP_PAT or COSENSE_SID. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Content format of newText. 'markdown' (default) converts Markdown to Scrapbox syntax. 'scrapbox' passes content through as-is, preserving Scrapbox-native indentation and syntax. | |
| newText | Yes | Replacement content in markdown format (default) or Scrapbox syntax (when format is 'scrapbox'). May contain multiple lines separated by newline characters. | |
| matchAll | No | If true, replace every occurrence of the target (a single line or a contiguous block). Block matches are non-overlapping. Defaults to false (replace only the first match). | |
| pageTitle | Yes | Title of the page to modify | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. | |
| targetLineText | Yes | Exact text of the line(s) to replace. Matching is case-sensitive and requires full-line exact matches. If it contains newline characters, the consecutive lines are matched as a contiguous block and replaced as a whole. |
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 meaningful traits: exact/contiguous matching rules, failure behavior ('returns an error if no match is found'), required credentials (COSENSE_MCP_PAT or COSENSE_SID) and the default project fallback. It stops short of saying the replaced text is permanently overwritten or how history/reversibility works, which matters for a mutation tool.
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?
Front-loads the action and matching rule, then layers defaults, failure mode and auth. Every sentence carries information, though the matchAll sentence partly duplicates the schema and the description runs slightly long for a 6-parameter tool.
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 matching semantics, matching failure, auth requirements and defaults, which is substantial for a mutation tool with no annotations. With no output schema present, it could have said what a successful call returns, leaving one modest gap.
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 100%, so the baseline is 3, but the description adds value beyond the schema by documenting the default projectName ('my-cosense-project') and restating matchAll's default and non-overlap rule in prose. The format parameter and its markdown-vs-scrapbox tradeoff are left entirely to the schema.
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 ('Replace one or more lines in a Scrapbox page') and pins down the matching semantics (exact text, block matching via newlines). An agent can immediately distinguish it from sibling insert_lines and delete_lines because replacement-in-place 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?
Gives clear operating context: default single-match behavior, matchAll for every non-overlapping occurrence, and an error when no match exists. It never names the sibling alternatives (insert_lines, delete_lines) or states when replacement is preferable to them, so routing is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageB
Get a page from Scrapbox project on cosense (scrapbox). Returns page content and its linked pages. Page content includes title and description in plain text format. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| pageTitle | Yes | Title of the page | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behaviors: it returns 'page content and its linked pages' and specifies the format ('plain text format'). However, it misses details like error handling (e.g., what happens if the page doesn't exist), performance aspects, or authentication needs, which are important for a read operation without annotations.
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?
The description is appropriately sized with three sentences that are front-loaded: the first states the purpose, the second details returns, and the third covers defaults. There is no wasted text, but it could be slightly more structured (e.g., bullet points for returns) without losing conciseness.
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?
Given no annotations and no output schema, the description partially compensates by explaining return values ('page content and its linked pages') and format. However, for a tool with two parameters and no structured output, it lacks completeness in areas like error cases, pagination, or example usage, leaving gaps for an AI agent to infer behavior.
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 100%, so the schema already documents both parameters fully. The description adds minimal value beyond the schema by reiterating the default for 'projectName' ('my-cosense-project'), but does not provide additional context like examples or constraints. This meets the baseline for high schema coverage.
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 clearly states the tool's purpose: 'Get a page from Scrapbox project on cosense (scrapbox).' It specifies the verb ('Get') and resource ('page'), and distinguishes it from siblings like 'create_page' (creation) and 'list_pages' (listing). However, it doesn't explicitly differentiate from 'get_page_url' (which might retrieve a URL rather than content), leaving some ambiguity.
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 description implies usage by stating it 'Uses my-cosense-project project as default if projectName is not specified,' which provides context for when to omit a parameter. However, it lacks explicit guidance on when to use this tool versus alternatives like 'search_pages' or 'get_page_url,' and does not mention prerequisites or exclusions, leaving usage somewhat inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_urlA
Generate URL for a page in Scrapbox project on cosense (scrapbox). Returns the direct URL to the specified page without opening it in browser. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the page | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context: the tool generates a URL without browser interaction and has a default project. However, it does not cover potential errors (e.g., if the page doesn't exist), rate limits, authentication needs, or the exact URL format, leaving gaps in behavioral transparency for a tool with no annotation support.
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?
The description is concise and well-structured, consisting of two sentences that efficiently convey the tool's purpose, behavior, and default parameter. Every sentence adds value: the first defines the action and context, and the second clarifies the default project and non-browser behavior, with no redundant or wasted 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?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is partially complete. It covers the core functionality and default behavior adequately, but lacks details on error handling, return format (beyond 'direct URL'), and differentiation from siblings. Without annotations or output schema, more context would improve completeness for safe agent use.
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 100%, with clear descriptions for both parameters in the input schema. The description adds marginal value by reiterating the default project behavior for 'projectName,' but does not provide additional semantic context beyond what the schema already documents, such as examples or constraints on the 'title' parameter. Baseline 3 is appropriate given high schema coverage.
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 clearly states the tool's purpose: 'Generate URL for a page in Scrapbox project on cosense (scrapbox).' It specifies the verb ('Generate URL'), resource ('a page'), and platform context ('Scrapbox project on cosense'). However, it does not explicitly differentiate from sibling tools like 'get_page' (which likely retrieves page content rather than just the URL), leaving room for improvement.
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 description provides some usage context by mentioning the default project ('my-cosense-project') and that it 'Returns the direct URL... without opening it in browser,' which implies a non-interactive use case. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_page' or 'list_pages,' and does not specify prerequisites or exclusions, relying on implied understanding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_smart_contextA
Get smart context for a page on cosense (scrapbox). Returns the target page and its linked pages (1-hop or 2-hop) with full content in AI-optimized format. Useful for understanding the context and related knowledge around a specific topic. Requires COSENSE_MCP_PAT or COSENSE_SID. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the page to get context for | |
| hopCount | No | Number of link hops to include. 1 (default) returns directly linked pages. 2 returns pages linked from linked pages (larger response). | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. |
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 well: it discloses auth requirements (COSENSE_MCP_PAT or COSENSE_SID), the default project fallback, the hop-depth behavior, and that 2-hop yields a larger response. It does not, however, mention pagination, rate limits, or error behavior on a missing page.
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?
Four sentences, purpose leading, each carrying distinct information (scope, use case, auth, default project). The final sentence partially duplicates the schema's projectName default, a minor redundancy, but overall the text is front-loaded and efficient.
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?
With no output schema, the description usefully characterizes the return ('full content in AI-optimized format'), so an agent understands what it receives. Auth prerequisites and the default project are covered; only edge-case behavior (missing page, response size limits) is absent.
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 100%, so all three parameters are already documented, including the hopCount enum semantics and the projectName default. The description restates the default project and hop behavior without adding syntax or constraints beyond the schema, making 3 the correct baseline.
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+resource (get context for a page) and clarifies scope: returns the target page plus its linked pages at 1- or 2-hop depth. This implies differentiation from the single-page sibling get_page, but it never names or contrasts siblings 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?
Gives a clear use context: 'Useful for understanding the context and related knowledge around a specific topic.' However, it offers no explicit when-not guidance and never names the alternative (e.g., use get_page for a single page's content), leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_linesA
Insert text after a specified line in a Scrapbox page on cosense (scrapbox). If target line not found, text is appended to the end of the page. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to insert in markdown format (default) or Scrapbox syntax (when format is 'scrapbox'). Can contain multiple lines separated by newline characters. | |
| format | No | Content format of the text. 'markdown' (default) converts Markdown to Scrapbox syntax. 'scrapbox' passes content through as-is, preserving Scrapbox-native indentation and syntax. | |
| pageTitle | Yes | Title of the page to modify | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. | |
| targetLineText | Yes | Text content of the line after which to insert new text. If not found, text will be appended to the end of the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the append fallback and default project behavior, adding useful context. However, it does not mention what happens if the page does not exist, how duplicate line matches are handled, or any permission/error conditions. This is adequate but not exhaustive.
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?
The description is two sentences, succinct, and front-loaded with the core function. No unnecessary wording or repetition. Every word contributes to understanding the tool.
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 description handles the core insert behavior and fallback logic. It does not cover edge cases like missing pages or ambiguous target lines, but given the schema already documents all parameters and there is no output schema, it is reasonably complete for the tool's complexity.
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 100%, so the description adds minimal value beyond what the schema already states. It repeats the default project and append behavior, which are also in the schema. No additional parameter insights are provided, so baseline 3 is appropriate.
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 clearly states the action (insert text after a specified line) and resource (Scrapbox page on cosense). It distinguishes from siblings like edit_lines and delete_lines by focusing on insertion. The verb is specific and the target 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?
The description implies when to use the tool: when you need to insert new text after a specific line, with a fallback to appending if not found. It does not explicitly mention alternatives or when not to use it, but the wording provides clear context for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesA
Browse and list pages from Scrapbox project on cosense (scrapbox) with flexible sorting and pagination. Use this tool to discover pages by recency, popularity, or alphabetically. Returns page metadata and first 5 lines of content. Available sorting methods: updated (last update time), created (creation time), accessed (access time), linked (number of incoming links), views (view count), title (alphabetical). Different from search_pages which finds content by keywords. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of pages to skip | |
| sort | No | Sort method for the page list | |
| limit | No | Maximum number of pages to return (1-1000) | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. | |
| excludePinned | No | Whether to exclude pinned pages from the results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by describing the return format ('Returns page metadata and first 5 lines of content'), pagination capability (implied through 'skip' parameter), and default project behavior. However, it doesn't mention rate limits, authentication requirements, or error conditions that would be helpful for a read operation.
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?
The description is appropriately sized and front-loaded with the core purpose in the first sentence. Each subsequent sentence adds valuable information about usage, return values, sorting options, and sibling differentiation. There's minimal redundancy, though the sorting methods list could be slightly more concise.
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 read-only listing tool with no output schema, the description provides good contextual completeness by explaining what's returned, how to use it versus alternatives, and default behaviors. It covers the essential aspects an agent needs, though additional details about response format structure or error handling would make it more complete.
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 schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some value by listing all sorting methods and explaining the default project behavior, but doesn't provide additional semantic context beyond what's in the schema descriptions. This meets the baseline expectation when schema coverage is high.
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 clearly states the tool's purpose with specific verbs ('browse and list pages') and resource ('from Scrapbox project on cosense'), distinguishing it from sibling tools by explicitly contrasting with search_pages. It provides concrete details about what the tool does, including the scope of returned data (page metadata and first 5 lines of content).
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 description explicitly states when to use this tool ('to discover pages by recency, popularity, or alphabetically') and when not to use it ('Different from search_pages which finds content by keywords'), providing clear alternatives. It also includes practical guidance about default project behavior, making it easy for an agent to choose between this tool and its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pagesA
Search for content within pages in Scrapbox project on cosense (scrapbox). Use this tool to find pages containing specific keywords or phrases. Returns matching pages with highlighted search terms and content snippets. Limited to 100 results maximum. Supports basic search ("keyword"), multiple keywords ("word1 word2" for AND search), exclude words ("word1 -word2"), and exact phrases (""exact phrase""). Different from list_pages which browses pages by metadata. Uses my-cosense-project project as default if projectName is not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string | |
| projectName | No | Target project name. If not specified, defaults to 'my-cosense-project'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It reveals important behavioral traits: result limitation ('Limited to 100 results maximum'), search syntax capabilities ('Supports basic search...'), and default project behavior. However, it doesn't mention potential error conditions, authentication requirements, or rate limits, which prevents a perfect score.
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?
The description is efficiently structured and front-loaded with the core purpose. Every sentence adds value: purpose statement, usage guidance, return format, limitations, search syntax, sibling differentiation, and default behavior. There's no wasted text, and information is presented in a logical flow.
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 search tool with 2 parameters, 100% schema coverage, and no output schema, the description provides substantial context about behavior, limitations, and usage. It explains what the tool returns ('Returns matching pages with highlighted search terms and content snippets') and search capabilities. The main gap is lack of output format details, which would be helpful given no 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?
With 100% schema description coverage, the baseline is 3, but the description adds meaningful context beyond the schema. It explains the default project behavior ('Uses my-cosense-project project as default if projectName is not specified') and provides search syntax examples that help interpret the query parameter. This adds practical value for parameter understanding.
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 clearly states the tool's purpose with specific verb ('Search for content') and resource ('within pages in Scrapbox project'), and explicitly distinguishes it from sibling tool list_pages ('Different from list_pages which browses pages by metadata'). This provides excellent clarity about what this tool does and how it differs from alternatives.
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 description provides explicit guidance on when to use this tool ('Use this tool to find pages containing specific keywords or phrases') and when to use alternatives ('Different from list_pages which browses pages by metadata'). It also specifies the default project behavior, giving clear context for usage decisions.
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.
1 tool update
v0.13.0- Changed
create_page1 field changed- changed
Input schema / properties / createActually / descriptionPrevious value: -"Whether to actually create the page using WebSocket API. If true (default), creates the page immediately. If false, returns only the creation URL."New value: +"Whether to actually create the page. If true (default), creates the page immediately. If false, returns only the creation URL."
5 tool updates
v0.10.1- Changed
create_page2 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Content in markdown format. Avoid duplicating the title in the body since it's automatically displayed at the top. Supports links, code blocks, lists, and emphasis."New value: +"Content in markdown format (default) or Scrapbox syntax (when format is 'scrapbox'). Avoid duplicating the title in the body since it's automatically displayed at the top. Supports links, code blocks, lists, and emphasis." - added
Input schema / properties / formatAdded value: +{ + "description": "Content format of the body. 'markdown' (default) converts Markdown to Scrapbox syntax. 'scrapbox' passes content through as-is, preserving Scrapbox-native indentation and syntax.", + "enum": [ + "markdown", + "scrapbox" + ], + "type": "string" +}
- Added
delete_lines - Added
edit_lines - Added
get_smart_context - Changed
insert_lines2 fields changed- added
Input schema / properties / formatAdded value: +{ + "description": "Content format of the text. 'markdown' (default) converts Markdown to Scrapbox syntax. 'scrapbox' passes content through as-is, preserving Scrapbox-native indentation and syntax.", + "enum": [ + "markdown", + "scrapbox" + ], + "type": "string" +} - changed
Input schema / properties / text / descriptionPrevious value: -"Text to insert. Can contain multiple lines separated by newline characters."New value: +"Text to insert in markdown format (default) or Scrapbox syntax (when format is 'scrapbox'). Can contain multiple lines separated by newline characters."
6 tool updates
v0.4.0- Changed
create_page1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
- Changed
get_page1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
- Changed
get_page_url1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
- Changed
insert_lines1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
- Changed
list_pages1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
- Changed
search_pages1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Target project name. If not specified, defaults to 'example-project'."New value: +"Target project name. If not specified, defaults to 'my-cosense-project'."
6 tool updates
- First observed
create_page - First observed
get_page - First observed
get_page_url - First observed
insert_lines - First observed
list_pages - First observed
search_pages
TDQS
Scored across 9 tools
Most tools target distinct operations (URL, create, edit, delete, insert, list, search). However, get_page and get_smart_context overlap notably since both return page content plus linked pages, differing mainly in formatting and hop depth, which could cause misselection.
All tools follow a consistent snake_case verb_noun pattern (get_page_url, get_smart_context, create_page, edit_lines, delete_lines, get_page, insert_lines, list_pages, search_pages). No mixed conventions or vague verbs.
Nine tools is well-scoped for a note-taking/wiki server, with each tool earning its place across read, write, discovery, and navigation operations.
The surface covers create, read, line-level edit/insert/delete, list, and search, but lacks a page-level delete or rename tool—ironically delete_lines explicitly references a delete_page tool that is not present, creating a dead end for removing or renaming whole pages.
Maintenance
Related MCP Connectors
OAuth-protected, read-only-by-default MCP server for provenance-labeled QuillCaddie project memory.
Private journal MCP server to search, analyze, and create Dabble Me entries securely via OAuth.
DocBase MCP server for AI agents
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for Wiki.js projects that enables full-text search, page retrieval, and page management capabilities. It allows LLMs to interact with wiki content through specialized tools for searching, listing, and creating pages.ISC
- AlicenseNot gradedqualityCmaintenanceMCP server for Cosense (formerly Scrapbox) that enables page creation, editing, deletion, and searching with WebSocket-based operations. Extends the original server with page-deletion and line-editing tools.2 npmMIT
- AlicenseBqualityCmaintenanceUnofficial MCP server for note.com using cookie-based authentication to manage notes and drafts via internal APIs.1913 npmMIT
- FlicenseNot gradedqualityBmaintenanceRead-only MCP server for the Cosense project 'shiyui' that provides tools for fetching pages, full-text search, vector search, and related page retrieval. It uses Cloudflare Access OAuth for authentication.-