{"name":"SilverFerret","description":"Comic library and authoring Studio for owners and their agents.","guide":"https://silverferret.com/llms.txt","visualGuide":"https://silverferret.com/guidelines-for-ai-assistants","schema":"https://silverferret.com/agents/schema.json","apiOrigin":"https://api.silverferret.com","mcp":"https://api.silverferret.com/mcp","rest":"https://api.silverferret.com/api/agent/call","authentication":{"type":"bearer","login":"/api/auth/login","logout":"/api/auth/logout","headers":{"Origin":"http://localhost:7837","X-SilverFerret":"1","Content-Type":"application/json"},"credentials":["username","passcode"]},"tools":[{"name":"library_list","description":"List published series, stable episode IDs and reading links. Filter by seriesId/episodeId. An episode filter includes its image URLs; includePages returns images for all matching episodes. No sign-in needed.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"episodeId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"includePages":{"type":"boolean"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"account_get","description":"Current signed-in owner profile; null when signed out.","inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_list","description":"List authorized series, episodes and stable page IDs. Owners/editors see their grants; administrators see all.","inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_records","description":"Read authorized canonical v4 records, including structured story notebooks. Optional series filter.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_page","description":"Read a page, its series records and pixel panel manifest. Use current revisions for edits.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"pageId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["seriesId","pageId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_plan","description":"Prepare an AgentPatch without saving. Actions: create_series, create_episode (8 pages), edit_page. Panel indices are zero-based in current panelOrder; positions are anchor-normalized. Text styles include burst for spiky shout bubbles. Return patch, IDs and Studio URL; preview then studio_patch.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"enum":["create_series","create_episode","edit_page"]},"operationId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"pageId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"title":{"type":"string","minLength":1,"maxLength":1000},"locale":{"enum":["ko","en","ja","zh","es"]},"commands":{"type":"array","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["op","axis"],"properties":{"op":{"const":"split_panel"},"panelId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"panelIndex":{"type":"integer","minimum":0,"maximum":24},"axis":{"enum":["x","y"]},"fraction":{"enum":[0.3333333333333333,0.5,0.6666666666666666]}}},{"type":"object","additionalProperties":false,"required":["op"],"properties":{"op":{"const":"add_row"}}},{"type":"object","additionalProperties":false,"required":["op","panelId","axis","delta"],"properties":{"op":{"const":"move_edge"},"panelId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"axis":{"enum":["x","y"]},"delta":{"type":"number","minimum":-1,"maximum":1},"snap":{"type":"boolean"}}},{"type":"object","additionalProperties":false,"required":["op","xMm","yMm"],"properties":{"op":{"const":"set_gutters"},"xMm":{"type":"number","minimum":1,"maximum":4},"yMm":{"type":"number","minimum":1,"maximum":8}}},{"type":"object","additionalProperties":false,"required":["op","text"],"properties":{"op":{"const":"add_text"},"panelId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"panelIndex":{"type":"integer","minimum":0,"maximum":24},"anchor":{"enum":["panel","page"]},"text":{"type":"string","maxLength":20000},"role":{"enum":["dialogue","thought","narration","sfx","title","caption","label","credit"]},"locale":{"enum":["ko","en","ja","zh","es"]},"frame":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"number","minimum":0,"maximum":1},"y":{"type":"number","minimum":0,"maximum":1},"width":{"type":"number","minimum":0,"maximum":1},"height":{"type":"number","minimum":0,"maximum":1}}},"balloonStyle":{"enum":["none","oval","rounded","whisper","burst","thought"]},"fontSizeMm":{"type":"number","minimum":1,"maximum":40},"writingMode":{"enum":["horizontal-tb","vertical-rl"]},"rotation":{"type":"number","minimum":-180,"maximum":180},"tailTip":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2}}},{"type":"object","additionalProperties":false,"required":["op","textBlockId","text"],"properties":{"op":{"const":"set_text"},"textBlockId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"text":{"type":"string","maxLength":20000},"locale":{"enum":["ko","en","ja","zh","es"]}}},{"type":"object","additionalProperties":false,"required":["op","letteringId"],"properties":{"op":{"const":"remove_lettering"},"letteringId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"}}},{"type":"object","additionalProperties":false,"required":["op","letteringId"],"properties":{"op":{"const":"update_lettering"},"letteringId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"anchor":{"type":"object"},"typography":{"type":"object"},"geometry":{"type":"object"},"style":{"type":"object"},"transform":{"type":"object"},"clip":{"type":"object"}}}]}}},"required":["action","operationId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_preview","description":"Render current or proposed page as SVG with lettering geometry and overflow/missing-glyph diagnostics; no save.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"pageId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"patch":{"type":"object"}},"required":["seriesId","pageId"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_patch","description":"Atomically save an AgentPatch using expected record revisions and one operationId. Same patch can be retried. Use for all story, panel, lettering, art, watermark and ordering records. Full schema: /agents/schema.json.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"patch":{"type":"object"}},"required":["patch"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_asset","description":"Get or upload original font/image bytes (base64). Register its asset record by studio_patch first; upload verifies SHA-256. Max 64 MiB.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"assetId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"data":{"type":"string"},"mime":{"type":"string"}},"required":["seriesId","assetId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"reading_history","description":"Read this account’s recent episodes; cursor supports pagination.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"before":{"type":"integer","minimum":1}},"required":[]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"reading_visit","description":"Mark an authorized/public episode read for this account. Reuse eventId on retry.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"episodeId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"eventId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["seriesId","episodeId","eventId"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"episode_social","description":"Read public comments/reactions, own private note, or update a reaction, note or public comment. Cursor paginates comments; note needs baseRevision; comment needs operationId. Acts as the signed-in owner.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"seriesId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"episodeId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"},"action":{"enum":["comments","reactions","mine","reaction","note","comment"]},"before":{"type":"integer","minimum":1},"value":{"type":"string"},"text":{"type":"string","maxLength":20000},"baseRevision":{"type":"integer","minimum":0},"operationId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,100}$"}},"required":["seriesId","episodeId","action"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}}]}