{"apiVersion":"v1","directorySlug":"rorygeddes-mcp-716753c2de","title":"Corner","description":"Building, travelling, learning. Rory Geddes' corner of the internet.","pageUrl":"https://www.mcpbundles.com/skills/rorygeddes-mcp-716753c2de","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.rorygeddes.com/mcp","hostedMcpUrl":null,"toolCount":32,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.rorygeddes/rorygeddes-mcp-716753c2de","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_site_content","description":"Read public site content from rorygeddes.com. Returns one section or all sections if none specified.","inputSchema":{"type":"object","properties":{"section":{"enum":["bio","projects","links","writing","meta"],"type":"string"}},"additionalProperties":false},"logicalName":"get_site_content","displayName":"get_site_content","title":"get_site_content","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_site_content","description":"Write new content for a section of rorygeddes.com. This is the write layer — Claude updates the site by calling this tool, not by editing files.","inputSchema":{"type":"object","required":["section","content"],"properties":{"content":{"type":"object","additionalProperties":{}},"section":{"enum":["bio","projects","links","writing","meta"],"type":"string"}},"additionalProperties":false},"logicalName":"update_site_content","displayName":"update_site_content","title":"update_site_content","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_notes","description":"Fetch Rory's personal notes / Claude persistent memory. Filter by category or tags.","inputSchema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","default":50,"maximum":100,"minimum":1},"category":{"type":"string"}},"additionalProperties":false},"logicalName":"get_notes","displayName":"get_notes","title":"get_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_note","description":"Add a new personal note or Claude memory entry.","inputSchema":{"type":"object","required":["title","body"],"properties":{"body":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"default":[]},"category":{"enum":["decision","context","reminder","general"],"type":"string","default":"general"}},"additionalProperties":false},"logicalName":"add_note","displayName":"add_note","title":"add_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_note","description":"Update the body of an existing note by ID.","inputSchema":{"type":"object","required":["id","body"],"properties":{"id":{"type":"string","format":"uuid"},"body":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"logicalName":"update_note","displayName":"update_note","title":"update_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_projects","description":"List all registered projects (Luni, AllAbroad, rorygeddes, etc.) with their stack info and status.","inputSchema":{"type":"object","properties":{"include_paused":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"list_projects","displayName":"list_projects","title":"list_projects","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"register_project","description":"Register a new project in the registry.","inputSchema":{"type":"object","required":["name","display_name"],"properties":{"name":{"type":"string"},"type":{"enum":["business","app","personal","experiment"],"type":"string","default":"app"},"status":{"enum":["active","planning","paused","archived"],"type":"string","default":"planning"},"featured":{"type":"boolean","default":false},"bible_path":{"type":"string"},"github_repo":{"type":"string"},"show_public":{"type":"boolean","default":false},"display_name":{"type":"string"},"mcp_endpoint":{"type":"string"},"display_order":{"type":"integer","default":99},"vercel_project":{"type":"string"},"railway_service":{"type":"string"},"supabase_project":{"type":"string"}},"additionalProperties":false},"logicalName":"register_project","displayName":"register_project","title":"register_project","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_project_status","description":"Update a project's status, MCP endpoint, or any field in the registry.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"status":{"enum":["active","planning","paused","archived"],"type":"string"},"featured":{"type":"boolean"},"custom_data":{"type":"object","additionalProperties":{}},"github_repo":{"type":"string"},"show_public":{"type":"boolean"},"mcp_endpoint":{"type":"string"},"vercel_project":{"type":"string"}},"additionalProperties":false},"logicalName":"update_project_status","displayName":"update_project_status","title":"update_project_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_aggregate_stats","description":"Pull aggregate stats across all rorygeddes projects from the local Supabase project — tasks, notes, emails, projects, transactions.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"get_aggregate_stats","displayName":"get_aggregate_stats","title":"get_aggregate_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_tasks","description":"List tasks from Rory's admin. Supports filtering by status, priority, label, and full-text search on title.","inputSchema":{"type":"object","properties":{"label":{"type":"string"},"limit":{"type":"integer","default":50,"maximum":200,"minimum":1},"search":{"type":"string"},"status":{"enum":["todo","done","all"],"type":"string","default":"todo"},"priority":{"enum":["high","medium","low"],"type":"string"},"include_archived":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"list_tasks","displayName":"list_tasks","title":"list_tasks","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_task","description":"Create a new task in the admin.","inputSchema":{"type":"object","required":["title"],"properties":{"labels":{"type":"array","items":{"type":"string"},"default":[]},"goal_id":{"type":"string","format":"uuid"},"due_date":{"type":"string"},"priority":{"enum":["high","medium","low"],"type":"string","default":"medium"},"project_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"logicalName":"create_task","displayName":"create_task","title":"create_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_task","description":"Update a task — change status to done, update priority, due date, etc.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid"},"labels":{"type":"array","items":{"type":"string"}},"status":{"enum":["todo","done"],"type":"string"},"archived":{"type":"boolean"},"due_date":{"type":"string","nullable":true},"priority":{"enum":["high","medium","low"],"type":"string"}},"additionalProperties":false},"logicalName":"update_task","displayName":"update_task","title":"update_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_emails","description":"List emails from the inbox. Filter by category (action, reply, fyi, spam) or search by subject/sender.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20,"maximum":100,"minimum":1},"search":{"type":"string"},"category":{"enum":["action","reply","fyi","spam"],"type":"string"},"unread_only":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"list_emails","displayName":"list_emails","title":"list_emails","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_people","description":"List people/contacts in the CRM. Search by name, filter by kind (connection, client, lead, etc.).","inputSchema":{"type":"object","properties":{"kind":{"type":"string"},"limit":{"type":"integer","default":50,"maximum":100,"minimum":1},"search":{"type":"string"}},"additionalProperties":false},"logicalName":"list_people","displayName":"list_people","title":"list_people","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_goals","description":"Get all goals with their AI analysis and linked task counts.","inputSchema":{"type":"object","properties":{"include_ai":{"type":"boolean","default":true}},"additionalProperties":false},"logicalName":"get_goals","displayName":"get_goals","title":"get_goals","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_transactions","description":"List financial transactions (Plaid-synced). Filter by date range, category, or amount.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1},"search":{"type":"string"},"category":{"type":"string"},"end_date":{"type":"string"},"start_date":{"type":"string"}},"additionalProperties":false},"logicalName":"list_transactions","displayName":"list_transactions","title":"list_transactions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_daily_notes","description":"Get daily journal notes. Returns recent entries by default.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":10,"maximum":50,"minimum":1},"search":{"type":"string"}},"additionalProperties":false},"logicalName":"get_daily_notes","displayName":"get_daily_notes","title":"get_daily_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_today","description":"Rory's day at a glance: current streak, habits with today's status and weekly progress, and whether he's journaled today.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"get_today","displayName":"get_today","title":"get_today","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"log_habit","description":"Log that Rory did a habit (by name) on a date (default today). Also refreshes his daily streak check-in.","inputSchema":{"type":"object","required":["habit"],"properties":{"date":{"type":"string"},"habit":{"type":"string"}},"additionalProperties":false},"logicalName":"log_habit","displayName":"log_habit","title":"log_habit","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_journal","description":"Recent journal recaps (highlights + mood/energy). Optionally search the highlight text.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20,"maximum":60,"minimum":1},"search":{"type":"string"}},"additionalProperties":false},"logicalName":"get_journal","displayName":"get_journal","title":"get_journal","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_memory","description":"Save a memory to Rory's timeline of the past.","inputSchema":{"type":"object","required":["title"],"properties":{"era":{"type":"string"},"body":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"default":[]},"location":{"type":"string"},"happened_on":{"type":"string"},"money_snapshot":{"type":"string"}},"additionalProperties":false},"logicalName":"add_memory","displayName":"add_memory","title":"add_memory","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_memories","description":"Search Rory's memories by era, tag, or free text.","inputSchema":{"type":"object","properties":{"era":{"type":"string"},"tag":{"type":"string"},"limit":{"type":"integer","default":20,"maximum":50,"minimum":1},"search":{"type":"string"}},"additionalProperties":false},"logicalName":"get_memories","displayName":"get_memories","title":"get_memories","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"people_to_reconnect","description":"People Rory is overdue to reach out to, based on each contact's reconnect cadence.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"people_to_reconnect","displayName":"people_to_reconnect","title":"people_to_reconnect","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_planning","description":"Summary of Rory's forward plans: active goals, open decisions, masters programs, travel, and wishlist.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"get_planning","displayName":"get_planning","title":"get_planning","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"draft_newsletter","description":"Assemble source material (recent highlights, goals, memories, travel) and save a newsletter DRAFT. Never sends. Returns the material so you can write/refine the copy.","inputSchema":{"type":"object","properties":{"body":{"type":"string"}},"additionalProperties":false},"logicalName":"draft_newsletter","displayName":"draft_newsletter","title":"draft_newsletter","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_add_photo","description":"Add clothes to Rack from a photo. Give it a photo of a drawer, shelf, or a single garment laid out and it identifies every item, tags category/colour/season/resale value, and files them into the wardrobe. Optionally assign them all to a location by city + container (e.g. Ottawa / 'Dresser drawer 2'). Use dry_run to preview what it found without saving.","inputSchema":{"type":"object","required":["image_base64"],"properties":{"city":{"type":"string"},"dry_run":{"type":"boolean","default":false},"container":{"type":"string"},"media_type":{"enum":["image/jpeg","image/png","image/webp"],"type":"string","default":"image/jpeg"},"image_base64":{"type":"string"}},"additionalProperties":false},"logicalName":"rack_add_photo","displayName":"rack_add_photo","title":"rack_add_photo","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_net_worth","description":"What the wardrobe is worth: total resale value of everything owned, what it cost, and realised earnings from items already sold.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"rack_net_worth","displayName":"rack_net_worth","title":"rack_net_worth","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_list_wardrobe","description":"List clothes in Rack. Filter by category, status (clean/dirty/packed/...), season, or city. Returns name, brand, colour, where it is, wear count and resale estimate.","inputSchema":{"type":"object","properties":{"city":{"type":"string"},"limit":{"type":"number","default":50},"season":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"}},"additionalProperties":false},"logicalName":"rack_list_wardrobe","displayName":"rack_list_wardrobe","title":"rack_list_wardrobe","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_where_is","description":"Find where a garment is. Fuzzy-matches on name and brand and returns the city and container it's stored in, plus its current status.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}},"additionalProperties":false},"logicalName":"rack_where_is","displayName":"rack_where_is","title":"rack_where_is","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_log_wear","description":"Log that garments were worn on a date (defaults to today). This also marks each item dirty, since wearing something is what puts it in the laundry.","inputSchema":{"type":"object","required":["item_ids"],"properties":{"worn_on":{"type":"string"},"item_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"logicalName":"rack_log_wear","displayName":"rack_log_wear","title":"rack_log_wear","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_packing_list","description":"The Halifax move list: everything flagged to bring, grouped by category, with a bulk total against suitcase capacity.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"rack_packing_list","displayName":"rack_packing_list","title":"rack_packing_list","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rack_sell_candidates","description":"What to sell next. Ranks by sell_score — high resale value and long unworn, minus wear count, favourites and core items.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","default":10}},"additionalProperties":false},"logicalName":"rack_sell_candidates","displayName":"rack_sell_candidates","title":"rack_sell_candidates","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Corner&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3Aucm9yeWdlZGRlcy5jb20vbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Corner%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.rorygeddes.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Corner%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.rorygeddes.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Corner&connectorUrl=https%3A%2F%2Fmcp.rorygeddes.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Corner\" --url \"https://mcp.rorygeddes.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/rorygeddes-mcp-716753c2de","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/rorygeddes-mcp-716753c2de/tools/{tool}","mcpServerUrl":"https://mcp.rorygeddes.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/rorygeddes-mcp-716753c2de?live=1"}