{"name":"io.github.chrischall/office-outlook-mcp","slug":"chrischall-office-outlook-mcp","title":null,"description":"Outlook / Microsoft 365 for Claude — mail, calendar, contacts and tasks, with confirm-gated sending","url":"https://mcp.market/server/chrischall-office-outlook-mcp","rating":null,"grade":"B","score":75,"certified":false,"status":"active","category":"email","tags":["email","productivity"],"presence":{"score":15,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-20T20:03:31.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/chrischall/office-outlook-mcp","website":null,"version":"0.1.1","remotes":[],"packages":[{"registryType":"npm","identifier":"@chrischall/office-outlook-mcp","version":"0.1.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"Pre-obtained Outlook bearer token. Overrides the browser bridge. Power users / CI only; tokens last about 25 hours.","format":"string","isSecret":true,"name":"OUTLOOK_ACCESS_TOKEN"},{"description":"Set to '1' to disable browser capture, requiring OUTLOOK_ACCESS_TOKEN.","format":"string","name":"OUTLOOK_DISABLE_FETCHPROXY"},{"description":"Override the Outlook REST base URL. Defaults to https://outlook.office.com/api/v2.0.","format":"string","name":"OUTLOOK_API_BASE"},{"description":"fetchproxy concentrator port used for token capture. Defaults to 37149, the fleet-wide shared port.","format":"string","name":"OUTLOOK_WS_PORT"},{"description":"Seconds to wait for the Outlook tab to make a request we can read a token from. Defaults to 30.","format":"string","name":"OUTLOOK_CAPTURE_TIMEOUT"},{"description":"Set to 'false' to stop caching the captured token between runs. Defaults to true.","format":"string","name":"OUTLOOK_TOKEN_CACHE"},{"description":"Path to the cached token file. Defaults to ~/.office-outlook-mcp/token.json.","format":"string","name":"OUTLOOK_TOKEN_FILE"}]}],"tools":[{"name":"outlook_create_draft","description":"Create a draft message in the Drafts folder without sending it. Requires confirm:true. Returns the created draft, which can be reviewed and sent from Outlook.","write_action":true,"price_micros":0,"input_schema":null},{"name":"outlook_create_event","description":"Create a calendar event. Requires confirm:true. `timeZone` takes a WINDOWS zone name such as \"Eastern Standard Time\", not an IANA name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"outlook_get_event","description":"Get one calendar event in full, including attendees and their responses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_get_mailbox_settings","description":"Get mailbox settings: time zone, working hours, language, and automatic-replies (out-of-office) configuration.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_get_message","description":"Get one message including its body. The body is requested as plain text rather than HTML (measured ~9x smaller and far easier to read); pass view:\"raw\" to get Outlook's untouched record.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_get_profile","description":"Get the signed-in mailbox's identity (email address, display name, alias). The cheapest call that proves the credential works.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_attachments","description":"List a message's attachments (name, size, content type). Metadata only \\u2014 this deliberately does not download bytes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_calendars","description":"List the calendars in the mailbox, for picking one to read or write against.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_contacts","description":"List saved contacts from the mailbox address book.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_events","description":"List calendar events in a date window. This uses the calendar VIEW, which expands recurring series into their individual occurrences \\u2014 the right tool for \"what is on my schedule\". Times are returned in `timeZone` when given.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_folders","description":"List mail folders with unread and total counts. Use this to discover folder ids before listing messages; the well-known names (","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_messages","description":"List messages in a folder, newest first. Defaults to the inbox. Use `unreadOnly` for a triage view. Bodies are NOT included \\u2014 call outlook_get_message for one. Note `search` and `unreadOnly` cannot be combined (the API rejects $search with $filter); pass `search` alone to search the whole mailbox.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_people","description":"List people ranked by relevance to the user \\u2014 colleagues and frequent correspondents, drawn from mail traffic rather than the saved address book. Better than outlook_list_contacts for resolving \"who is X\" in a work mailbox.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_list_tasks","description":"List Outlook tasks with status and due dates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_mark_read","description":"Mark a message read or unread. Requires confirm:true. The result is verified by re-reading the message \\u2014 a 2xx alone is not proof it persisted.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_move_message","description":"Move a message to another folder (e.g. \"archive\", \"deleteditems\", or a folder id from outlook_list_folders). Requires confirm:true. Moving assigns a NEW message id, which is returned.","write_action":false,"price_micros":0,"input_schema":null},{"name":"outlook_send_mail","description":"Send an email from the signed-in mailbox. Requires confirm:true \\u2014 without it this makes no network call and returns a preview of exactly what would be sent.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":75,"grade":"B","scanned_at":"2026-09-20T20:55:52.499Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:55:52.475Z","components":{"code":{"score":20,"max":25,"notes":["20 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 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/bundle.js: …Code, sch); const validate2 = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@chrischall/office-outlook-mcp","version":"0.1.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-20T20:14:14.775Z","repositoryUrl":"git+https://github.com/chrischall/office-outlook-mcp.git"}],"repo":{"found":true,"owner":"chrischall","repo":"office-outlook-mcp","archived":false,"pushedAt":"2026-09-20T20:03:31Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10564245?v=4","ownerCreatedAt":"2015-01-16T16:58:09Z"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-20T20:03:31.000Z","score":15}}}},"grade_history":[],"reviews":[]}