{"schema_version":"1.0.0","name":"Firstory MCP","description":"Character consistency MCP server and app for fiction writers.","version":"0.0.1","serverUrl":"https://firstory-mcp.vercel.app/mcp","serverInfo":{"name":"firstory-mcp","title":"Firstory MCP","version":"0.0.1","description":"Character consistency MCP server and app for fiction writers."},"transport":{"type":"streamable-http","url":"https://firstory-mcp.vercel.app/mcp"},"capabilities":{"tools":[{"name":"character-query","description":"Analyze a specific named character's consistency in a story passage — detects trait contradictions, voice deviations, and relationship inconsistencies for that one character. Use when you know which character to focus on (requires characterName). NOT for scanning all characters in a scene at once; use trigger-analysis for full-scene coverage."},{"name":"character-list","description":"Return a lightweight roster of all registered characters (id, name, role, aliases, trait count, relationship count). Use first when you don't know a character's ID or want to see who is registered. NOT for full trait/relationship/arc data on a specific character; use character-profile once you have the name or ID."},{"name":"character-profile","description":"Return the complete profile for a specific character — full traits, relationships, arc, and learned memory notes. Use when you need detailed character data before writing a scene or reviewing their arc. Requires characterId or characterName. NOT for listing all characters; use character-list for discovery first."},{"name":"upsert-character","description":"Create or update a character profile (traits, relationships, arc, notes). Use when adding a new character or recording story developments. Pass dryRun:true to preview and validate changes before persisting. NOT for submitting editorial feedback on an analysis result; use feedback-character for that."},{"name":"trigger-analysis","description":"Scan a story passage for consistency issues across ALL registered characters simultaneously. Use after writing a scene when you want comprehensive coverage without targeting one character. NOT for focused single-character analysis; use character-query with a characterName instead."},{"name":"feedback-character","description":"Submit editorial judgment on a character analysis result — accepts or dismisses specific issues, updating per-character learned memory in real time. Use immediately after character-query or trigger-analysis returns issues you want the system to learn from. NOT for editing character profiles; use upsert-character for that."},{"name":"account-status","description":"Return the user's current subscription tier (free/pro) and whether billing actions are available. Use before any premium operation to check access level, or to show upgrade prompts. Safe to call unauthenticated — does not require auth."},{"name":"create-checkout-session","description":"Start a Stripe checkout flow to upgrade to the pro tier. Use when account-status shows the user is on the free tier and they want premium features. Returns a URL the user opens in their browser to complete payment. NOT for managing an existing subscription; use create-billing-portal-session for that."},{"name":"create-billing-portal-session","description":"Start a Stripe billing portal for subscription management — cancel, change plan, update payment method. Use for users with an existing subscription who want to manage it. NOT for new sign-ups or first-time upgrades; use create-checkout-session for that."}],"resources":true,"experimental":{"oauth":{"authorizationServer":"https://firstory-mcp.vercel.app/.well-known/oauth-authorization-server","resourceMetadata":"https://firstory-mcp.vercel.app/.well-known/oauth-protected-resource/mcp"}}},"app":{"resourceUri":"ui://firstory/mcp-app.html","url":"https://firstory-mcp.vercel.app/mcp-app.html"},"tools":[{"name":"character-query","description":"Analyze a specific named character's consistency in a story passage — detects trait contradictions, voice deviations, and relationship inconsistencies for that one character. Use when you know which character to focus on (requires characterName). NOT for scanning all characters in a scene at once; use trigger-analysis for full-scene coverage."},{"name":"character-list","description":"Return a lightweight roster of all registered characters (id, name, role, aliases, trait count, relationship count). Use first when you don't know a character's ID or want to see who is registered. NOT for full trait/relationship/arc data on a specific character; use character-profile once you have the name or ID."},{"name":"character-profile","description":"Return the complete profile for a specific character — full traits, relationships, arc, and learned memory notes. Use when you need detailed character data before writing a scene or reviewing their arc. Requires characterId or characterName. NOT for listing all characters; use character-list for discovery first."},{"name":"upsert-character","description":"Create or update a character profile (traits, relationships, arc, notes). Use when adding a new character or recording story developments. Pass dryRun:true to preview and validate changes before persisting. NOT for submitting editorial feedback on an analysis result; use feedback-character for that."},{"name":"trigger-analysis","description":"Scan a story passage for consistency issues across ALL registered characters simultaneously. Use after writing a scene when you want comprehensive coverage without targeting one character. NOT for focused single-character analysis; use character-query with a characterName instead."},{"name":"feedback-character","description":"Submit editorial judgment on a character analysis result — accepts or dismisses specific issues, updating per-character learned memory in real time. Use immediately after character-query or trigger-analysis returns issues you want the system to learn from. NOT for editing character profiles; use upsert-character for that."},{"name":"account-status","description":"Return the user's current subscription tier (free/pro) and whether billing actions are available. Use before any premium operation to check access level, or to show upgrade prompts. Safe to call unauthenticated — does not require auth."},{"name":"create-checkout-session","description":"Start a Stripe checkout flow to upgrade to the pro tier. Use when account-status shows the user is on the free tier and they want premium features. Returns a URL the user opens in their browser to complete payment. NOT for managing an existing subscription; use create-billing-portal-session for that."},{"name":"create-billing-portal-session","description":"Start a Stripe billing portal for subscription management — cancel, change plan, update payment method. Use for users with an existing subscription who want to manage it. NOT for new sign-ups or first-time upgrades; use create-checkout-session for that."}]}