{"serverId":"mcp-registry/com.mojalab/content","tools":[{"name":"get_page","fixed":{"name":"get_page","description":"Get the full content of a published MojaLab static page as Markdown, by slug.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Page slug, e.g. \"about\""}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a static page"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"get_post","fixed":{"name":"get_post","description":"Get the full content of a published MojaLab blog post as Markdown, by slug. Includes any companion repository link.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Post slug, e.g. \"hello-world\""}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a blog post"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"get_related_posts","fixed":{"name":"get_related_posts","description":"Get posts related to a given post (by shared tags and content similarity), for recommendations.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Slug of the reference post"},"limit":{"type":"integer","maximum":10,"minimum":1,"description":"Max related posts (default 3)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get related posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"get_site_summary","fixed":{"name":"get_site_summary","description":"Get a concise overview of mojalab.com in one call: what the site is about, main topics, article/page counts, recent articles, and available tools/pages. Use for questions like \"what is mojalab?\".","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get site summary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"list_pages","fixed":{"name":"list_pages","description":"List published static pages on MojaLab (about, tools, ...).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1,"description":"Page number (default 1)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Pages per page (default 10, max 50)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List static pages"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"list_posts","fixed":{"name":"list_posts","description":"List published MojaLab blog posts (title, slug, excerpt, tags, date). Paginated; optionally filter by tag slug, filter by publish date, and sort.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"tag":{"type":"string","description":"Filter by tag slug (see list_tags)"},"page":{"type":"integer","minimum":1,"description":"Page number (default 1)"},"sort":{"enum":["date_desc","date_asc","title"],"type":"string","description":"Sort order (default date_desc)"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Posts per page (default 10, max 50)"},"since":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Only posts published on/after this date (YYYY-MM-DD)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List blog posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"list_tags","fixed":{"name":"list_tags","description":"List all public tags on MojaLab with their post counts and descriptions.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List tags"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"search_all","fixed":{"name":"search_all","description":"Search across all published content — blog posts, static pages/tools, and companion GitHub repositories — ranked by relevance. Each result is prefixed with [post], [page], or [repo].","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":20,"minimum":1,"description":"Max results (default 10)"},"query":{"type":"string","minLength":1,"description":"Keyword or question to search for"},"content_type":{"enum":["all","posts","pages","repos"],"type":"string","description":"Restrict to a content type (default all)"},"excerpt_length":{"type":"integer","maximum":500,"minimum":50,"description":"Max excerpt characters (default 150)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search all content"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"search_posts","fixed":{"name":"search_posts","description":"Search published MojaLab posts by keyword or natural-language query. Results are ranked by relevance (0–1) using hybrid lexical + semantic matching. Use excerpt_length for longer previews.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":20,"minimum":1,"description":"Max results (default 5)"},"query":{"type":"string","minLength":1,"description":"Keyword or question to search for"},"excerpt_length":{"type":"integer","maximum":500,"minimum":50,"description":"Max excerpt characters (default 150)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search blog posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":188,"tokensAfter":188}],"toolsChanged":9,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}