{"name":"io.github.andreasd083/amazing-marvin-complete-mcp","slug":"andreasd083-amazing-marvin-complete-mcp","title":"Amazing Marvin (complete)","description":"Amazing Marvin task manager: complete public-API coverage (38 tools) with built-in rate limiting","url":"https://mcp.market/server/andreasd083-amazing-marvin-complete-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"productivity","tags":["productivity"],"presence":{"score":36,"stars":6,"forks":0,"downloads_week":460,"last_push_at":"2026-09-18T18:40:58.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/andreasd083/amazing-marvin-complete-mcp","website":null,"version":"1.7.2","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"amazing-marvin-complete-mcp","version":"1.7.2","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Amazing Marvin API token (Settings -> API). Enough for reading and creating tasks.","isRequired":true,"isSecret":true,"name":"MARVIN_API_TOKEN"},{"description":"Amazing Marvin Full Access token (optional but recommended - required by update/delete tools, category creation, time blocks, habit listing, reminders).","isSecret":true,"name":"MARVIN_FULL_ACCESS_TOKEN"},{"description":"IANA timezone matching your Marvin account (e.g. Europe/Stockholm). Defaults to the system timezone.","name":"MARVIN_TIMEZONE"}]}],"tools":[{"name":"claim_reward_points","description":"Award reward points for a completed task or manually. Note: mark_done does not award a task's rewardPoints automatically through the API (cf. issue #6 about kudos) — call this tool separately afterwards. WARNING: a MANUAL award CANNOT be undone through the API (verified live 2026-08-19: unclaim returns 404, negative points are rejected with 400). The only compensation is spend_reward_points for th","write_action":false,"price_micros":0,"input_schema":null},{"name":"convert_category_or_project","description":"Convert a project to a category or back, in place and losslessly. EXPERIMENTAL: Convert project→category or category→project IN PLACE via /doc/update (Full Access Token; there is no official conversion endpoint, and this relies on undocumented server behavior that Marvin could change). Same _id, createdAt and children remain — conversion is a pure type change (verified against the live API 2026-08","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_category_or_project","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_event","description":"Create a calendar event (experimental), synced by the app. EXPERIMENTAL: Create a calendar event. Calendar sync happens in the client — the Marvin app must be running on some device for the event to sync onwards to an external calendar.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_task","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_time_block","description":"Create a time block (experimental) and get its id back. EXPERIMENTAL: Create a time block via /doc/create (db='PlannerItems', Full Access Token). No official endpoint exists. Verify in the app that the block looks right.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_reminder","description":"Delete one or more server-side reminders. Note: for a reminder that belongs to a task (set in the app), only the server-side entry is removed — the task document's reminder fields are not cleared, so the app may show it as active and recreate it. Prefer using this against standalone reminders (type 'M') or to clean up orphaned entries from get_reminders.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_task","description":"Delete a task permanently, with no trash and no undo. Delete a task/document PERMANENTLY via /doc/delete (Full Access Token). Marvin's trash is client-side — an API deletion bypasses it and CANNOT be undone (deleting in the app instead puts the item in the trash, where it can be restored — prefer the app when undo matters). Only use when the user explicitly wants a deletion. Never delete the gener","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_account_info","description":"Get account info (/me): email, tracking status and points balance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_categories","description":"Get all categories and projects as a hierarchy with id and parentId. Get all categories and projects (the whole hierarchy; parentId='root' is the top level). Use to find the right parent_id when creating/moving.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_children","description":"Get open tasks and subprojects in a category or project. Returns direct children only — call again for deeper levels. Note: orphans (tasks whose parentId points to a deleted/non-existent document) do NOT show up under 'unassigned' — only in get_today_items/get_due_items if they have a day/dueDate (live-tested 2026-08-29). Orphans are repaired by running FIX_CYCLES() in the app's console (a documen","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_done_items","description":"Get tasks completed on a given date. Tasks completed on a given date (doneAt within that day, configured timezone) — regardless of priority and deadline. Built on the UNDOCUMENTED endpoint GET /doneItems?date= (missing from the OpenAPI spec and the wiki; live-tested 2026-08-30, may disappear): it filters on the task's `day`, not on doneAt. A past `day` is kept on completion both in the app and via","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_due_items","description":"Get open tasks and projects with a deadline today or earlier.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_goals","description":"Get all goals with status and check-in data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_habit","description":"Get a habit's server tracking record with its full history. Get the server's tracking record for a single habit (habitId + full history — the source of truth for recordings). Note: the response lacks title and settings; those are in list_habits.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_kudos","description":"Get kudos, level and kudosRemaining from Marvin's XP system. Note: kudos is separate from reward points (the reward currency) — the point balance is in get_account_info. nextMultiplier only exists in /me, not here (known limitation, MarvinAPI issue #5).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_labels","description":"Get all labels with ids, for label_ids and filtering.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_rate_limit_status","description":"Show today's Marvin API calls against the 1440/day budget. Show how many Marvin API calls have been made today (budget 1440/day, shared by all tools).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_reminders","description":"Get all server-side reminders, push notifications to the phone. Requires the Full Access Token.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_time_tracks","description":"Get time-tracking history for up to 100 tasks. Get time-tracking history for the given tasks (the source of truth, max 100 per call).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_today_items","description":"Get open tasks and projects scheduled today or earlier. Get open tasks/projects with `day` <= the date (default today in MARVIN_TIMEZONE, or the system's local timezone when unset) — i.e. also items scheduled earlier than the date, not only those on exactly that day. Tasks that only have a deadline are not included; fetch them with get_due_items. Observed 2026-09-11 with rollover enabled in the ac","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_today_time_blocks","description":"Get today's time blocks with their category or smart-list mapping. The API response lacks the category link (known limitation, MarvinAPI issue #65); the mapping is therefore fetched separately from the profile setting plannerSmartLists (key = normalized block title).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_tracked_item","description":"Show which task is being time-tracked right now.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_capabilities","description":"List every Marvin tool by area, with what it can and cannot do. Costs no Marvin API call. Call it before assuming something is impossible via MCP or requires manual work in the app; field conditions and live-tested details live in each tool's own description.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_habits","description":"Get all habits with title, settings and history. Get all habits as full documents incl. title, settings and history ([time1, value1, time2, value2, ...], unix ms). Requires the Full Access Token (the raw variant of /habits). Important (verified live 2026-08-19): non-raw /habits would be wrong here — it reads the server's tracking registry, which is created lazily on the first recording, so never-r","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_done","description":"Mark a task as done; projects are completed in the app. Mark a task as done (via /markDone, with the correct timezone offset). Tasks ONLY: for projects the API responds 400 'Can only mark Tasks done with this API' (verified live 2026-08-19) — projects are completed in the Marvin app (done=true via /doc/update would technically work but skips the app's side effects). Safe for generated instances of","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_habit","description":"Record or undo a habit check-in, synced to the app. Also updates the sync database (updateDB=true) so the Marvin app shows the change immediately.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reset_reward_points","description":"Reset reward points permanently, balance and history. Reset reward points PERMANENTLY: deletes the whole earn/spend history and sets the balance to 0 (Full Access Token). CANNOT be undone — only use when the user explicitly asks for it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_priority","description":"Set priority (P1-P3 or low) or the frog marker on a task. Set or change priority (isStarred) and/or the frog marker on an existing TASK. Requires the Full Access Token. The app's four levels are stored as isStarred 3/2/1/-1 (Most/Very/Important/Low priority; -1 verified against the app's code and live-tested 2026-08-30). Low priority is shown in the app only with 'Enable low priority' on in the Pr","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_reminder","description":"Set a standalone push reminder to the phone. Times on tasks are set in the app, not here. Set a standalone push reminder (type 'M', requires the Marvin mobile app to be logged in). WARNING — data integrity: a task reminder in Marvin consists of TWO writes that only the app keeps in sync — reminder fields on the task document itself (taskTime, reminderTime, reminderOffset, snooze, autoSnooze) AND a","write_action":false,"price_micros":0,"input_schema":null},{"name":"spend_reward_points","description":"Spend reward points on a reward. Note (verified live): the API responds 500 Internal Server Error if the balance would go negative — check the balance (get_account_info) before large purchases.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_tracking","description":"Start time tracking on a task.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stop_tracking","description":"Stop time tracking on a task; the time lands in get_time_tracks. Stop time tracking for a task. Note (documented API limitation, confirmed live 2026-09-02): the task's own times/duration fields are not updated by /track STOP — the tracking only lands in /tracks (get_time_tracks). Exception: mark_done during active tracking now writes task.times (see mark_done).","write_action":false,"price_micros":0,"input_schema":null},{"name":"test_connection","description":"Check that the API token works against Marvin's API. Returns OK if the apiToken works.","write_action":false,"price_micros":0,"input_schema":null},{"name":"unclaim_reward_points","description":"Undo a reward-point award tied to a task. Undo a point award (e.g. after a misclick, or when the task was un-completed with unmark_done). Only works for awards tied to a real task ID: Marvin's server stores no entry for MANUAL awards (verified live 2026-08-19, /unclaimRewardPoints responds 404 'No such entry'). Compensate a MANUAL award with spend_reward_points for the same amount instead.","write_action":false,"price_micros":0,"input_schema":null},{"name":"unmark_done","description":"Undo a task's completion. Undo a completion (sets done=false and clears doneAt via /doc/update). Requires the Full Access Token. Safe for generated instances of recurring tasks too (verified live). Note: any kudos from the completion are not adjusted; awarded reward points can however be undone with unclaim_reward_points. A permanent 500 = the document does not exist (deleted or wrong ID; the serv","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_category_or_project","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_task","description":"","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-19T19:29:39.907Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:29:39.911Z","components":{"code":{"score":25,"max":25,"notes":["7 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"amazing-marvin-complete-mcp","version":"1.7.2","found":true,"weeklyDownloads":460,"license":"MIT","dependencyCount":5,"publishedAt":"2026-09-18T18:41:13.263599Z","repositoryUrl":"https://github.com/andreasd083/amazing-marvin-complete-mcp"}],"repo":{"found":true,"owner":"andreasd083","repo":"amazing-marvin-complete-mcp","archived":false,"pushedAt":"2026-09-18T18:40:58Z","stars":6,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/61774228?v=4","ownerCreatedAt":"2020-03-04T06:37:34Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":6,"forks":0,"downloadsWeek":460,"license":"MIT","lastPushAt":"2026-09-18T18:40:58.000Z","score":36}}}},"grade_history":[],"reviews":[]}