[{"data":1,"prerenderedAt":39},["ShallowReactive",2],{"$f3pl9tja53g5q3":3},{"href":4,"title":5,"description":6,"kind":7,"mark":8,"planned":9,"contributors":10,"provenance":8,"html":11,"headings":12},"\u002Fdocs\u002Ftools\u002Fsentry","Sentry","Issues, events and traces, through Sentry's own hosted MCP server, connected with OAuth.","integrates",null,false,[],"\u003Ch2 id=\"what-a-member-can-do\">What a member can do\u003C\u002Fh2>\n\u003Cp>With Sentry connected, a member can work in the Sentry organisations its Sentry account belongs to: search issues,\nevents and traces, read an issue's details and stack trace, and update issues (resolve, assign, ignore), as far as\nthat account's own role in Sentry allows.\u003C\u002Fp>\n\u003Cp>Each task names the Sentry tools it may call. \u003Ccode>sentry\u003C\u002Fcode> on a task means every tool Sentry's server offers; a name\nsuch as \u003Ccode>sentry.search_issues\u003C\u002Fcode> means that tool alone. A tool the task does not name is refused, whatever the\nconnection allows. If Sentry's server does not answer when a run starts, the run carries on rather than failing,\nand its log records \u003Ccode>tool.not_offered\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>A member fixing what Sentry reports does the code itself in a \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces\">workspace\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"who-connects-it\">Who connects it\u003C\u002Fh2>\n\u003Cp>A Sentry connection is made with Sentry's own OAuth, so it acts as \u003Cstrong>the Sentry user who approved it\u003C\u002Fstrong> when it\nwas connected. Everything the member does in Sentry is recorded against that user, and it\ncan reach only what that user can.\u003C\u002Fp>\n\u003Cp>A connection can sit on the enterprise, a team, a member, a role or a task, and the one further down replaces the\none above: task, then role, then member, then team, then enterprise. Connect a member's own while Sentry is signed\nin as that member's own Sentry account, and what it resolves or assigns shows under its own name. Connect it while\nsigned in as yourself, and it all shows as you.\u003C\u002Fp>\n\u003Cp>A connection on anything but a task also reaches the \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fchat\">chat\u003C\u002Fa> of every member it covers.\u003C\u002Fp>\n\u003Ch2 id=\"what-waits-for-you\">What waits for you\u003C\u002Fh2>\n\u003Cp>In a run, nothing on Sentry waits for you unless the task declares a gate on it. To approve each change before it\nhappens, gate the tools that change something, such as \u003Ccode>sentry.update_issue\u003C\u002Fcode>, on the task. See\n\u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">Gates and tool scopes\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>In a chat, a Sentry tool that Sentry does not mark as read-only asks you before it runs, unless you chose\n\u003Cstrong>Always allow\u003C\u002Fstrong> for that member and tool.\u003C\u002Fp>\n\u003Ch2 id=\"setup\">Setup\u003C\u002Fh2>\n\u003Ch3 id=\"connect-it\">Connect it\u003C\u002Fh3>\n\u003Cp>Work in one browser window throughout: Sentry returns to the portal in the window you started from.\u003C\u002Fp>\n\u003Col>\n\u003Cli>In the portal, on the member's page → \u003Cstrong>Tools\u003C\u002Fstrong> (or \u003Cstrong>Tools\u003C\u002Fstrong>, for another layer), choose \u003Cstrong>Add tool\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Kind:\u003C\u002Fstrong> MCP. \u003Cstrong>Tool type:\u003C\u002Fstrong> \u003Ccode>sentry\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MCP server URL:\u003C\u002Fstrong> \u003Ccode>https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\u003C\u002Fcode>. To keep the member to one organisation, add its slug:\n\u003Ccode>https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\u002F&lt;organisation-slug&gt;\u003C\u002Fcode>, or to one project,\n\u003Ccode>https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\u002F&lt;organisation-slug&gt;\u002F&lt;project-slug&gt;\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Auth:\u003C\u002Fstrong> OAuth. Leave the client ID, client secret and scopes blank: Sentry registers Zero Human OS as a client\nby itself.\u003C\u002Fli>\n\u003Cli>Choose \u003Cstrong>Connect with OAuth\u003C\u002Fstrong>. Sign in to Sentry as the account the member should act as, and approve.\u003C\u002Fli>\n\u003Cli>Name the tools on the task, \u003Ccode>sentry\u003C\u002Fcode> for all of them or each by name.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Check it.\u003C\u002Fstrong> Run a task that searches Sentry's issues. The run page shows the call and what Sentry returned.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"custom-props-for-your-organisation\">Custom props, for your organisation\u003C\u002Fh3>\n\u003Cp>Sentry's tools take the organisation as an argument, \u003Ccode>organizationSlug\u003C\u002Fcode>. Set it once on the binding, and every task\nand chat that uses the binding works in that organisation without naming it: open the binding on \u003Cstrong>Tools\u003C\u002Fstrong>, press\n\u003Cstrong>Custom props\u003C\u002Fstrong> at the top right of the form, and add this key (or send it as \u003Ccode>props\u003C\u002Fcode> over the \u003Ca href=\"\u002Fdocs\u002Fapi\">API\u003C\u002Fa>):\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Value\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>organizationSlug\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Your Sentry organisation's slug, as in \u003Ccode>https:\u002F\u002F&lt;slug&gt;.sentry.io\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>The model is never asked for it, and a tool that takes no organisation is sent nothing. The catalog's Sentry triage\ntask expects it.\u003C\u002Fp>\n\u003Ch3 id=\"giving-a-member-its-own-sentry-account\">Giving a member its own Sentry account\u003C\u002Fh3>\n\u003Cp>A member joins Sentry the way a person would: invite the member's Zero Human address to your Sentry organisation,\nwith the role and teams it needs. The invitation, and every other Sentry email for the member, appears in the\n\u003Cstrong>Inbox\u003C\u002Fstrong> on its member page in the portal. Accept it and set the account up in a \u003Cstrong>separate browser profile or a\nprivate window\u003C\u002Fstrong>, where Sentry is not signed in as you, then connect the member's binding from that same window,\nsigned in to the portal as yourself.\u003C\u002Fp>\n\u003Ch2 id=\"troubleshooting\">Troubleshooting\u003C\u002Fh2>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>What you see\u003C\u002Fth>\n\u003Cth>Why\u003C\u002Fth>\n\u003Cth>What to do\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>&quot;Could not discover OAuth from that MCP URL&quot;\u003C\u002Ftd>\n\u003Ctd>The URL is not Sentry's MCP server\u003C\u002Ftd>\n\u003Ctd>Use \u003Ccode>https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\u003C\u002Fcode>, with an organisation or project slug after it if you want one\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>&quot;OAuth did not complete&quot;\u003C\u002Ftd>\n\u003Ctd>You approved in a different browser or window from the one you started in\u003C\u002Ftd>\n\u003Ctd>Start again, and do the whole connection in one window\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>A change in Sentry shows as you\u003C\u002Ftd>\n\u003Ctd>The connection was approved while Sentry was signed in as you\u003C\u002Ftd>\n\u003Ctd>Remove the binding and connect it again, signed in to Sentry as the member\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The run's log says \u003Ccode>tool.not_offered\u003C\u002Fcode> for a Sentry tool\u003C\u002Ftd>\n\u003Ctd>Sentry's server did not answer when the run started, or the connection no longer works\u003C\u002Ftd>\n\u003Ctd>Run it again; if it repeats, remove the binding and connect it again\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>tool_not_bound:sentry\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>No Sentry connection reaches this run\u003C\u002Ftd>\n\u003Ctd>Connect it at a layer the run reaches: its task, its member or the member's roles, its team, or the enterprise\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Calls fail with an auth error after working\u003C\u002Ftd>\n\u003Ctd>The authorisation was revoked in Sentry, or the account lost access\u003C\u002Ftd>\n\u003Ctd>Remove the binding and connect it again\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n",[13,17,20,23,26,30,33,36],{"id":14,"text":15,"level":16,"planned":9},"what-a-member-can-do","What a member can do",2,{"id":18,"text":19,"level":16,"planned":9},"who-connects-it","Who connects it",{"id":21,"text":22,"level":16,"planned":9},"what-waits-for-you","What waits for you",{"id":24,"text":25,"level":16,"planned":9},"setup","Setup",{"id":27,"text":28,"level":29,"planned":9},"connect-it","Connect it",3,{"id":31,"text":32,"level":29,"planned":9},"custom-props-for-your-organisation","Custom props, for your organisation",{"id":34,"text":35,"level":29,"planned":9},"giving-a-member-its-own-sentry-account","Giving a member its own Sentry account",{"id":37,"text":38,"level":16,"planned":9},"troubleshooting","Troubleshooting",1791124519818]