{"apiVersion":"v1","directorySlug":"midttom-mcp-f93cd3de45","title":"Kristoffer Midttømme","description":null,"pageUrl":"https://www.mcpbundles.com/skills/midttom-mcp-f93cd3de45","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.midttom.me/mcp","hostedMcpUrl":null,"toolCount":83,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"me.midttom/midttom-mcp-f93cd3de45","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"oda_oda_search_products","description":"Search for products by name. Returns results with IDs, prices, image URLs, and favorite status.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}},"additionalProperties":false},"logicalName":"oda_oda_search_products","displayName":"oda_oda_search_products","title":"oda_oda_search_products","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_oda_search_recipes","description":"Search for recipes by name.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}},"additionalProperties":false},"logicalName":"oda_oda_search_recipes","displayName":"oda_oda_search_recipes","title":"oda_oda_search_recipes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_favorite_products","description":"Retrieve the user's most frequently bought products.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"oda_get_favorite_products","displayName":"oda_get_favorite_products","title":"oda_get_favorite_products","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_promotions","description":"Retrieve products currently on sale or with special offers.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"oda_get_promotions","displayName":"oda_get_promotions","title":"oda_get_promotions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_product_lists","description":"Retrieve all of the user's saved product lists (name, id, product count).","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"oda_get_product_lists","displayName":"oda_get_product_lists","title":"oda_get_product_lists","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_product_list_items","description":"Retrieve items in a specific product list. Use `get_product_lists` first to find list IDs.","inputSchema":{"type":"object","required":["list_id"],"properties":{"list_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"oda_get_product_list_items","displayName":"oda_get_product_list_items","title":"oda_get_product_list_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_add_to_cart","description":"Add one unit of a product to the cart by product ID.","inputSchema":{"type":"object","required":["item_id"],"properties":{"item_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"oda_add_to_cart","displayName":"oda_add_to_cart","title":"oda_add_to_cart","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_cart","description":"Retrieve the current shopping cart.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"oda_get_cart","displayName":"oda_get_cart","title":"oda_get_cart","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_remove_from_cart","description":"Remove one unit of a product from the cart by product ID.","inputSchema":{"type":"object","required":["item_id"],"properties":{"item_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"oda_remove_from_cart","displayName":"oda_remove_from_cart","title":"oda_remove_from_cart","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_product_image","description":"Fetch a product image by product ID and return it as a base64-encoded string.","inputSchema":{"type":"object","required":["item_id"],"properties":{"item_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"oda_get_product_image","displayName":"oda_get_product_image","title":"oda_get_product_image","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"oda_get_latest_delivery","description":"Retrieve the latest delivery/order, including its product details with image URLs.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"oda_get_latest_delivery","displayName":"oda_get_latest_delivery","title":"oda_get_latest_delivery","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_athlete_profile","description":"Get the authenticated athlete's profile information.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"strava_get_athlete_profile","displayName":"strava_get_athlete_profile","title":"strava_get_athlete_profile","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_athlete_stats","description":"Get activity statistics for an athlete. If athlete_id is not provided, uses authenticated athlete.","inputSchema":{"type":"object","properties":{"athlete_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"strava_get_athlete_stats","displayName":"strava_get_athlete_stats","title":"strava_get_athlete_stats","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_activity_details","description":"Get detailed information about a specific activity.","inputSchema":{"type":"object","required":["activity_id"],"properties":{"activity_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"strava_get_activity_details","displayName":"strava_get_activity_details","title":"strava_get_activity_details","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_recent_activities","description":"Get recent activities for the authenticated athlete.","inputSchema":{"type":"object","properties":{"per_page":{"type":"integer","default":30}},"additionalProperties":false},"logicalName":"strava_get_recent_activities","displayName":"strava_get_recent_activities","title":"strava_get_recent_activities","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_list_athlete_clubs","description":"List clubs that the authenticated athlete belongs to.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"strava_list_athlete_clubs","displayName":"strava_list_athlete_clubs","title":"strava_list_athlete_clubs","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_list_starred_segments","description":"List segments starred by the authenticated athlete.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"strava_list_starred_segments","displayName":"strava_list_starred_segments","title":"strava_list_starred_segments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_segment","description":"Get detailed information about a specific segment.","inputSchema":{"type":"object","required":["segment_id"],"properties":{"segment_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"strava_get_segment","displayName":"strava_get_segment","title":"strava_get_segment","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_explore_segments","description":"Explore segments in a given area. Bounds format: lat1,lng1,lat2,lng2","inputSchema":{"type":"object","required":["bounds"],"properties":{"bounds":{"type":"string"},"max_cat":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"min_cat":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"activity_type":{"anyOf":[{"enum":["running","riding"],"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"strava_explore_segments","displayName":"strava_explore_segments","title":"strava_explore_segments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_segment_effort","description":"Get detailed information about a specific segment effort.","inputSchema":{"type":"object","required":["effort_id"],"properties":{"effort_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"strava_get_segment_effort","displayName":"strava_get_segment_effort","title":"strava_get_segment_effort","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_list_segment_efforts","description":"List segment efforts for a specific segment.","inputSchema":{"type":"object","required":["segment_id"],"properties":{"per_page":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"segment_id":{"type":"integer"},"end_date_local":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"start_date_local":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"strava_list_segment_efforts","displayName":"strava_list_segment_efforts","title":"strava_list_segment_efforts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_list_athlete_routes","description":"List routes created by the authenticated athlete.","inputSchema":{"type":"object","properties":{"page":{"type":"integer","default":1},"per_page":{"type":"integer","default":30}},"additionalProperties":false},"logicalName":"strava_list_athlete_routes","displayName":"strava_list_athlete_routes","title":"strava_list_athlete_routes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_route","description":"Get detailed information about a specific route.","inputSchema":{"type":"object","required":["route_id"],"properties":{"route_id":{"type":"string"}},"additionalProperties":false},"logicalName":"strava_get_route","displayName":"strava_get_route","title":"strava_get_route","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_export_route_gpx","description":"Export route as GPX data.","inputSchema":{"type":"object","required":["route_id"],"properties":{"route_id":{"type":"string"}},"additionalProperties":false},"logicalName":"strava_export_route_gpx","displayName":"strava_export_route_gpx","title":"strava_export_route_gpx","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_export_route_tcx","description":"Export route as TCX data.","inputSchema":{"type":"object","required":["route_id"],"properties":{"route_id":{"type":"string"}},"additionalProperties":false},"logicalName":"strava_export_route_tcx","displayName":"strava_export_route_tcx","title":"strava_export_route_tcx","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_activity_laps","description":"Get laps for a specific activity.","inputSchema":{"type":"object","required":["activity_id"],"properties":{"activity_id":{"anyOf":[{"type":"integer"},{"type":"string"}]}},"additionalProperties":false},"logicalName":"strava_get_activity_laps","displayName":"strava_get_activity_laps","title":"strava_get_activity_laps","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"strava_get_activity_segment_efforts","description":"Get segment efforts for a specific activity.","inputSchema":{"type":"object","required":["activity_id"],"properties":{"activity_id":{"type":"integer"},"include_all_efforts":{"type":"boolean","default":true}},"additionalProperties":false},"logicalName":"strava_get_activity_segment_efforts","displayName":"strava_get_activity_segment_efforts","title":"strava_get_activity_segment_efforts","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_get_current_playback","description":"Get information about user's current track.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spotify_get_current_playback","displayName":"spotify_get_current_playback","title":"spotify_get_current_playback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_start_playback","description":"Start playing new item or resume current playback if called with no URI.","inputSchema":{"type":"object","properties":{"spotify_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"spotify_start_playback","displayName":"spotify_start_playback","title":"spotify_start_playback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_pause_playback","description":"Pause current playback.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spotify_pause_playback","displayName":"spotify_pause_playback","title":"spotify_pause_playback","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_skip_track","description":"Skip current track. Optionally specify number of tracks to skip.","inputSchema":{"type":"object","properties":{"num_skips":{"type":"integer","default":1}},"additionalProperties":false},"logicalName":"spotify_skip_track","displayName":"spotify_skip_track","title":"spotify_skip_track","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_search_spotify","description":"Search for tracks, albums, artists, or playlists on Spotify.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","default":10},"qtype":{"type":"string","default":"track"},"query":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_search_spotify","displayName":"spotify_search_spotify","title":"spotify_search_spotify","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_add_to_queue","description":"Add a track to the playback queue.","inputSchema":{"type":"object","required":["track_id"],"properties":{"track_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_add_to_queue","displayName":"spotify_add_to_queue","title":"spotify_add_to_queue","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_get_queue","description":"Get the current playback queue.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spotify_get_queue","displayName":"spotify_get_queue","title":"spotify_get_queue","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_get_item_info","description":"Get detailed information about a Spotify item (track, album, artist, or playlist).","inputSchema":{"type":"object","required":["item_uri"],"properties":{"item_uri":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_get_item_info","displayName":"spotify_get_item_info","title":"spotify_get_item_info","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_get_user_playlists","description":"Get a list of current user's playlists.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spotify_get_user_playlists","displayName":"spotify_get_user_playlists","title":"spotify_get_user_playlists","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_get_playlist_tracks","description":"Get tracks in a specific playlist.","inputSchema":{"type":"object","required":["playlist_id"],"properties":{"playlist_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_get_playlist_tracks","displayName":"spotify_get_playlist_tracks","title":"spotify_get_playlist_tracks","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_create_playlist","description":"Create a new playlist for the current user. The playlist is always empty. You can add tracks later.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_create_playlist","displayName":"spotify_create_playlist","title":"spotify_create_playlist","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_add_tracks_to_playlist","description":"Add tracks to a specific playlist.","inputSchema":{"type":"object","required":["playlist_id","track_ids"],"properties":{"track_ids":{"type":"array","items":{"type":"string"}},"playlist_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_add_tracks_to_playlist","displayName":"spotify_add_tracks_to_playlist","title":"spotify_add_tracks_to_playlist","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_remove_tracks_from_playlist","description":"Remove tracks from a specific playlist.","inputSchema":{"type":"object","required":["playlist_id","track_ids"],"properties":{"track_ids":{"type":"array","items":{"type":"string"}},"playlist_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_remove_tracks_from_playlist","displayName":"spotify_remove_tracks_from_playlist","title":"spotify_remove_tracks_from_playlist","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spotify_change_playlist_details","description":"Change details of a specific playlist.","inputSchema":{"type":"object","required":["playlist_id"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"playlist_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spotify_change_playlist_details","displayName":"spotify_change_playlist_details","title":"spotify_change_playlist_details","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"telegram_send_telegram_message","description":"Send a message to Kristoffer.","inputSchema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"parse_mode":{"anyOf":[{"enum":["MarkdownV2","Markdown","HTML"],"type":"string"},{"type":"null"}],"default":"MarkdownV2"}},"additionalProperties":false},"logicalName":"telegram_send_telegram_message","displayName":"telegram_send_telegram_message","title":"telegram_send_telegram_message","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"telegram_send_telegram_photo","description":"Send a photo to Kristoffer.","inputSchema":{"type":"object","required":["photo_path"],"properties":{"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"parse_mode":{"anyOf":[{"enum":["MarkdownV2","Markdown","HTML"],"type":"string"},{"type":"null"}],"default":"MarkdownV2"},"photo_path":{"type":"string"}},"additionalProperties":false},"logicalName":"telegram_send_telegram_photo","displayName":"telegram_send_telegram_photo","title":"telegram_send_telegram_photo","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"telegram_get_outbox","description":"Hent siste utgående Telegram-meldinger logget av denne broen.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":50},"contains":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"since_iso":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"telegram_get_outbox","displayName":"telegram_get_outbox","title":"telegram_get_outbox","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_bootstrap","description":"Seed the four personal secrets (tenant_id, device_id, client_secret, refresh_token).","inputSchema":{"type":"object","required":["tenant_id","device_id","client_secret","refresh_token"],"properties":{"device_id":{"type":"string"},"tenant_id":{"type":"string"},"client_secret":{"type":"string"},"refresh_token":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_bootstrap","displayName":"vigilo_bootstrap","title":"vigilo_bootstrap","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_set_refresh_token","description":"Overwrite the refresh token (rescue when iOS invalidated ours).","inputSchema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_set_refresh_token","displayName":"vigilo_set_refresh_token","title":"vigilo_set_refresh_token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_get_bootstrap_status","description":"Return whether all four secrets are present + last successful sync time.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"vigilo_get_bootstrap_status","displayName":"vigilo_get_bootstrap_status","title":"vigilo_get_bootstrap_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_list_children","description":"List synced children with class + school/AKS unit IDs.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"vigilo_list_children","displayName":"vigilo_list_children","title":"vigilo_list_children","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_list_messages","description":"List message headers (without body/attachments) ordered newest first.","inputSchema":{"type":"object","properties":{"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"child_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"only_unseen":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"vigilo_list_messages","displayName":"vigilo_list_messages","title":"vigilo_list_messages","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_get_message","description":"Full message body + attachment list (with extracted-text preview).","inputSchema":{"type":"object","required":["thread_id"],"properties":{"thread_id":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_get_message","displayName":"vigilo_get_message","title":"vigilo_get_message","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_get_attachment_text","description":"Return extracted plaintext for a PDF/DOCX attachment (default for daily use).","inputSchema":{"type":"object","required":["attachment_id"],"properties":{"attachment_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"vigilo_get_attachment_text","displayName":"vigilo_get_attachment_text","title":"vigilo_get_attachment_text","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_get_attachment_base64","description":"Return the full attachment content base64-encoded. Re-fetches if expired.","inputSchema":{"type":"object","required":["attachment_id"],"properties":{"attachment_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"vigilo_get_attachment_base64","displayName":"vigilo_get_attachment_base64","title":"vigilo_get_attachment_base64","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_get_attachment_download_url","description":"Return a ready-to-curl URL for the raw attachment bytes.","inputSchema":{"type":"object","required":["attachment_id"],"properties":{"attachment_id":{"type":"integer"}},"additionalProperties":false},"logicalName":"vigilo_get_attachment_download_url","displayName":"vigilo_get_attachment_download_url","title":"vigilo_get_attachment_download_url","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_list_checkout_notes","description":"List checkout notes (pickup messages for AKS).","inputSchema":{"type":"object","properties":{"to_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"child_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"from_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"vigilo_list_checkout_notes","displayName":"vigilo_list_checkout_notes","title":"vigilo_list_checkout_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_list_news","description":"List news feed events (checkIn/checkOut/post).","inputSchema":{"type":"object","properties":{"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"child_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"vigilo_list_news","displayName":"vigilo_list_news","title":"vigilo_list_news","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_sync_status","description":"Return the most recent sync_log row (status, timing, new_messages).","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"vigilo_sync_status","displayName":"vigilo_sync_status","title":"vigilo_sync_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_sync","description":"Run a full sync against Vigilo. Returns {status, new_messages} or error.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"vigilo_sync","displayName":"vigilo_sync","title":"vigilo_sync","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_mark_read","description":"Mark a thread as read (locally). Next sync will mirror to Vigilo if wired.","inputSchema":{"type":"object","required":["thread_id"],"properties":{"thread_id":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_mark_read","displayName":"vigilo_mark_read","title":"vigilo_mark_read","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_create_checkout_note","description":"Create a checkout note (AKS pickup plan). Deadline: 12:00 same day.","inputSchema":{"type":"object","required":["child_id","unit_id","date"],"properties":{"date":{"type":"string"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"to_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"unit_id":{"type":"string"},"child_id":{"type":"string"},"time_of_day":{"type":"string","default":"17:00:00"},"picked_up_by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"vigilo_create_checkout_note","displayName":"vigilo_create_checkout_note","title":"vigilo_create_checkout_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_fetch_remote_checkout_notes","description":"GET checkout notes directly from Vigilo backend (read-only, bypasses local cache).","inputSchema":{"type":"object","required":["unit_id","from_date","to_date"],"properties":{"to_date":{"type":"string"},"unit_id":{"type":"string"},"child_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"from_date":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_fetch_remote_checkout_notes","displayName":"vigilo_fetch_remote_checkout_notes","title":"vigilo_fetch_remote_checkout_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_delete_remote_checkout_note","description":"DELETE a checkout note from Vigilo backend by id (read fetch_remote first).","inputSchema":{"type":"object","required":["unit_id","note_id"],"properties":{"note_id":{"type":"string"},"unit_id":{"type":"string"}},"additionalProperties":false},"logicalName":"vigilo_delete_remote_checkout_note","displayName":"vigilo_delete_remote_checkout_note","title":"vigilo_delete_remote_checkout_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"vigilo_purge_expired_attachments","description":"Clear content+extracted_text from attachments where expires_at < now().","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"vigilo_purge_expired_attachments","displayName":"vigilo_purge_expired_attachments","title":"vigilo_purge_expired_attachments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_list_calendars","description":"List the calendars the account has access to (id, name, access role).","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"gcal_list_calendars","displayName":"gcal_list_calendars","title":"gcal_list_calendars","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_list_events","description":"List events in a calendar between time_min and time_max (ISO 8601).","inputSchema":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"time_max":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"time_min":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"calendar_id":{"type":"string","default":"primary"},"max_results":{"type":"integer","default":50}},"additionalProperties":false},"logicalName":"gcal_list_events","displayName":"gcal_list_events","title":"gcal_list_events","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_get_event","description":"Get full details for a single event.","inputSchema":{"type":"object","required":["calendar_id","event_id"],"properties":{"event_id":{"type":"string"},"calendar_id":{"type":"string"}},"additionalProperties":false},"logicalName":"gcal_get_event","displayName":"gcal_get_event","title":"gcal_get_event","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_create_event","description":"Create an event. It is automatically tagged #KI so it can later be\nedited or deleted via this MCP.","inputSchema":{"type":"object","required":["summary","start","end"],"properties":{"end":{"type":"string"},"start":{"type":"string"},"summary":{"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"timezone":{"type":"string","default":"Europe/Oslo"},"calendar_id":{"type":"string","default":"primary"}},"additionalProperties":false},"logicalName":"gcal_create_event","displayName":"gcal_create_event","title":"gcal_create_event","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_update_event","description":"Update an event. Refuses unless the event is #KI-tagged (created here).","inputSchema":{"type":"object","required":["calendar_id","event_id"],"properties":{"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"event_id":{"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"timezone":{"type":"string","default":"Europe/Oslo"},"calendar_id":{"type":"string"}},"additionalProperties":false},"logicalName":"gcal_update_event","displayName":"gcal_update_event","title":"gcal_update_event","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"gcal_delete_event","description":"Delete an event. Refuses unless the event is #KI-tagged (created here).","inputSchema":{"type":"object","required":["calendar_id","event_id"],"properties":{"event_id":{"type":"string"},"calendar_id":{"type":"string"}},"additionalProperties":false},"logicalName":"gcal_delete_event","displayName":"gcal_delete_event","title":"gcal_delete_event","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_sync","description":"Hent innboksen fra Skolemelding og lagre nye meldinger lokalt.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"skolemelding_sync","displayName":"skolemelding_sync","title":"skolemelding_sync","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_list_messages","description":"List lagrede skolemeldinger, nyeste først.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20},"bare_uvarslede":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"skolemelding_list_messages","displayName":"skolemelding_list_messages","title":"skolemelding_list_messages","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_mark_notified","description":"Merk meldinger som varslet, så de ikke nevnes på nytt i neste tikk.","inputSchema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"integer"}}},"additionalProperties":false},"logicalName":"skolemelding_mark_notified","displayName":"skolemelding_mark_notified","title":"skolemelding_mark_notified","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_get_attachment_text","description":"Hent et vedlegg og trekk ut teksten. `path` er den relative stien fra\n`list_messages` (feltet ligger i meldingens vedlegg_json), f.eks.\n`/globalassets/attachments/2026/august/21/a-plan-8a-uke-35--bol.pdf`.","inputSchema":{"type":"object","required":["path"],"properties":{"path":{"type":"string"}},"additionalProperties":false},"logicalName":"skolemelding_get_attachment_text","displayName":"skolemelding_get_attachment_text","title":"skolemelding_get_attachment_text","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_get_attachment_download_url","description":"Gi en ferdig-å-curle URL for rå vedleggsbytes (byte-perfekt).","inputSchema":{"type":"object","required":["path"],"properties":{"path":{"type":"string"}},"additionalProperties":false},"logicalName":"skolemelding_get_attachment_download_url","displayName":"skolemelding_get_attachment_download_url","title":"skolemelding_get_attachment_download_url","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"skolemelding_set_refresh_token","description":"Skriv inn et ferskt refresh-token (nødvei når appen har rotert vårt).","inputSchema":{"type":"object","required":["refresh_token"],"properties":{"username":{"type":"string","default":""},"device_id":{"type":"string","default":""},"refresh_token":{"type":"string"}},"additionalProperties":false},"logicalName":"skolemelding_set_refresh_token","displayName":"skolemelding_set_refresh_token","title":"skolemelding_set_refresh_token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spond_sync","description":"Hent kommende hendelser og annonseringer fra Spond og lagre dem.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spond_sync","displayName":"spond_sync","title":"spond_sync","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spond_list_new","description":"Spesielle hendelser og annonseringer livsmotoren ikke har nevnt ennå.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20}},"additionalProperties":false},"logicalName":"spond_list_new","displayName":"spond_list_new","title":"spond_list_new","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spond_list_unanswered","description":"Stående oversikt: spesielle hendelser Kristoffer ikke har svart på,\nsortert på frist. Uavhengig av varslet-status — til dagsbrief o.l.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"spond_list_unanswered","displayName":"spond_list_unanswered","title":"spond_list_unanswered","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spond_mark_notified","description":"Merk hendelser og/eller annonseringer som varslet, så de ikke gjentas.","inputSchema":{"type":"object","properties":{"post_ids":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":null},"event_ids":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"spond_mark_notified","displayName":"spond_mark_notified","title":"spond_mark_notified","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"spond_rsvp","description":"Svar deltar/deltar ikke på en hendelse for ett av Kristoffers medlemmer.","inputSchema":{"type":"object","required":["event_id","member_id","attending"],"properties":{"event_id":{"type":"string"},"attending":{"type":"boolean"},"member_id":{"type":"string"}},"additionalProperties":false},"logicalName":"spond_rsvp","displayName":"spond_rsvp","title":"spond_rsvp","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"chess_sync","description":"Hent nye partier fra Duolingo og lagre dem.","inputSchema":{"type":"object","properties":{"full":{"type":"boolean","default":false}},"additionalProperties":false},"logicalName":"chess_sync","displayName":"chess_sync","title":"chess_sync","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"chess_list_matches","description":"Rå partier, eldst først, klare til analyse.","inputSchema":{"type":"object","properties":{"kilde":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"type":"integer","default":500},"siden":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"chess_list_matches","displayName":"chess_list_matches","title":"chess_list_matches","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"chess_status","description":"Hvor mange partier per kilde, tidsspenn, ELO og sist synk.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"logicalName":"chess_status","displayName":"chess_status","title":"chess_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"chess_sett_token","description":"Lagre en ny Duolingo-JWT.","inputSchema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}},"additionalProperties":false},"logicalName":"chess_sett_token","displayName":"chess_sett_token","title":"chess_sett_token","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Kristoffer-Midtt-mme&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AubWlkdHRvbS5tZS9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Kristoffer-Midtt-mme%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.midttom.me%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Kristoffer-Midtt-mme%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.midttom.me%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Kristoffer+Midtt%C3%B8mme&connectorUrl=https%3A%2F%2Fmcp.midttom.me%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Kristoffer-Midtt-mme\" --url \"https://mcp.midttom.me/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/midttom-mcp-f93cd3de45","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/midttom-mcp-f93cd3de45/tools/{tool}","mcpServerUrl":"https://mcp.midttom.me/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/midttom-mcp-f93cd3de45?live=1"}