{"apiVersion":"v1","directorySlug":"codyreading-mcp-dbf1bcd7a5","title":"Cody Reading","description":"Cody Reading helps reading specialists, tutors, classroom teachers, and interventionists create and evaluate decodable stories aligned to UFLI Foundations lessons. Users can find relevant UFLI lesson numbers, generate lesson-aligned stories from a topic, revise generated or pasted stories while preserving lesson alignment, and analyze existing passages for decodability. Results render in an interactive story viewer with a decodability score, word-category highlighting, challenge-word review, and a printable PDF link.","pageUrl":"https://www.mcpbundles.com/skills/codyreading-mcp-dbf1bcd7a5","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://www.codyreading.com/mcp","hostedMcpUrl":null,"toolCount":4,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.codyreading/codyreading-mcp-dbf1bcd7a5","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"list_ufli_lessons","description":"List UFLI curriculum lessons with their target phonetic patterns. Use this when the user needs to find a lesson number, browse available lessons, or wants to know which patterns are taught at a given level. Also use this when the user mentions a phonetic pattern (like 'sh' or 'long a') and you need to find which lesson covers it. Returns lesson number, name, unit, and target patterns for each lesson.","inputSchema":{"type":"object","properties":{"to_lesson":{"type":"integer","default":128},"from_lesson":{"type":"integer","default":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_ufli_lessons","displayName":"list_ufli_lessons","title":"list_ufli_lessons"},{"name":"generate_story","description":"Generate a decodable story aligned to a specific UFLI lesson. The story uses phonetic patterns from the target lesson and all prior lessons. Returns story text with decodability analysis and a PDF download link.","inputSchema":{"type":"object","required":["lesson_number"],"properties":{"topic":{"type":"string","default":"a fun adventure"},"story_length":{"type":"string","default":"short"},"lesson_number":{"type":"integer"}},"additionalProperties":false},"logicalName":"generate_story","displayName":"generate_story","title":"generate_story","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"revise_story","description":"Revise an existing decodable story while keeping it aligned to a UFLI lesson. Use this when the user has a story (for example one just generated) and wants to change it — make it shorter or longer, add a character, change the topic, or use more of a target sound. Prefer passing story_ref — the opaque id returned by a previous generate_story, revise_story, or analyze_story result — which lets you revise a story you cannot see the text of. Pass story_text only when you do not have a ref (for examp","inputSchema":{"type":"object","required":["lesson_number","revision_instruction"],"properties":{"story_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"story_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"story_length":{"type":"string","default":"short"},"lesson_number":{"type":"integer"},"revision_instruction":{"type":"string"}},"additionalProperties":false},"logicalName":"revise_story","displayName":"revise_story","title":"revise_story","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"analyze_story","description":"Analyze existing text for decodability against a specific UFLI lesson. Use this when a user provides story text, a passage, or reading material and wants to know if it's appropriate for their students' reading level. Returns decodability percentage and word-level analysis with a PDF download link.","inputSchema":{"type":"object","required":["story_text","lesson_number"],"properties":{"story_text":{"type":"string"},"lesson_number":{"type":"integer"}},"additionalProperties":false},"logicalName":"analyze_story","displayName":"analyze_story","title":"analyze_story","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Cody-Reading&config=eyJ1cmwiOiAiaHR0cHM6Ly93d3cuY29keXJlYWRpbmcuY29tL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Cody-Reading%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fwww.codyreading.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Cody-Reading%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fwww.codyreading.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Cody+Reading&connectorUrl=https%3A%2F%2Fwww.codyreading.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Cody-Reading\" --url \"https://www.codyreading.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/codyreading-mcp-dbf1bcd7a5","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/codyreading-mcp-dbf1bcd7a5/tools/{tool}","mcpServerUrl":"https://www.codyreading.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/codyreading-mcp-dbf1bcd7a5?live=1"}