[{"data":1,"prerenderedAt":36},["ShallowReactive",2],{"$f3pfha7yrbddq6":3},{"href":4,"title":5,"description":6,"kind":7,"mark":8,"planned":9,"contributors":10,"provenance":8,"html":11,"headings":12},"\u002Fdocs\u002Ftools\u002Foutrank","Outrank","Writer questions for scheduled articles, through Outrank's MCP server, which you host.","integrates",null,false,[],"\u003Ch2 id=\"what-a-member-can-do\">What a member can do\u003C\u002Fh2>\n\u003Cp>With Outrank connected, a member can list the keywords scheduled for one product, read one keyword's writer\nquestions, and submit answers to those questions. Which of these it has is what the server you host offers and\nwhat the task names.\u003C\u002Fp>\n\u003Cp>Name each Outrank tool a task needs, such as \u003Ccode>keywords_list\u003C\u002Fcode>, \u003Ccode>keywords_get\u003C\u002Fcode>, and \u003Ccode>keywords_update\u003C\u002Fcode>, rather than\nall of Outrank: a tool the task does not name is refused.\u003C\u002Fp>\n\u003Cp>\u003Ccode>keywords_update\u003C\u002Fcode> replaces the keyword's whole question list. Sending one answer deletes the rest. A careful\nbridge re-reads the keyword first and refuses the write unless the ids are the complete current set, the wording\nis unchanged, and every answer is text of at most 1000 characters. That refusal comes back as the tool's own\nresult, so the run can carry on.\u003C\u002Fp>\n\u003Ch2 id=\"who-connects-it\">Who connects it\u003C\u002Fh2>\n\u003Cp>Outrank's CLI ships \u003Ccode>outrank-mcp\u003C\u002Fcode>, and that server speaks MCP over standard input and output only. To connect\nOutrank you run it yourself, behind an HTTPS address that Zero Human OS calls with a token of your choosing. Your\nOutrank API key stays on your server; Zero Human OS only ever holds your bearer token.\u003C\u002Fp>\n\u003Cp>Pin the bridge to one product. A call that names another product is refused, and a keyword that belongs to\nanother product is not shown.\u003C\u002Fp>\n\u003Cp>Connect Outrank \u003Cstrong>on the task that writes\u003C\u002Fstrong>, not on a member, team, role or the enterprise. A connection on any\nof those also reaches the \u003Ca href=\"\u002Fdocs\u002Fwork\u002Fchat\">chat\u003C\u002Fa> of every member it covers, where the catalogue is one approval\naway from a write the task's skill never made. A task's own connection never reaches chat.\u003C\u002Fp>\n\u003Ch2 id=\"what-waits-for-you\">What waits for you\u003C\u002Fh2>\n\u003Cp>Nothing written to Outrank waits for you unless the task declares a gate on \u003Ccode>keywords_update\u003C\u002Fcode>. To see each\nanswer before it is saved, gate that tool: the run waits with the questions it would send, and nothing is\nwritten until you approve it on \u003Cstrong>Gates\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{ &quot;tool&quot;: &quot;keywords_update&quot;, &quot;owner&quot;: &quot;ceo&quot;, &quot;approval&quot;: &quot;specific&quot; }\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>See \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">Gates and tool scopes\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"setup\">Setup\u003C\u002Fh2>\n\u003Ch3 id=\"run-outranks-mcp-server\">Run Outrank's MCP server\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Run the \u003Ccode>outrank-mcp\u003C\u002Fcode> bin of \u003Ccode>outrank-cli\u003C\u002Fcode>, with the keywords toolset. It needs your Outrank API key. Do not\npass a profile that would ignore that key.\u003C\u002Fli>\n\u003Cli>Put a bridge in front of it that serves MCP's \u003Cstrong>Streamable HTTP\u003C\u002Fstrong> transport, at an HTTPS address, and refuses\nany request whose \u003Ccode>Authorization\u003C\u002Fcode> header is not \u003Ccode>Bearer &lt;your token&gt;\u003C\u002Fcode>. Choose a long random token.\u003C\u002Fli>\n\u003Cli>Offer only \u003Ccode>keywords_list\u003C\u002Fcode>, \u003Ccode>keywords_get\u003C\u002Fcode>, and \u003Ccode>keywords_update\u003C\u002Fcode>. What the bridge does not offer, no task\ncan call. Before \u003Ccode>keywords_update\u003C\u002Fcode>, re-read the keyword and refuse a body that is not the complete current\nquestion list.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"connect-it\">Connect it\u003C\u002Fh3>\n\u003Col>\n\u003Cli>In the portal, on \u003Cstrong>Tools\u003C\u002Fstrong>, choose \u003Cstrong>Add tool\u003C\u002Fstrong>. \u003Cstrong>Layer:\u003C\u002Fstrong> Task, and \u003Cstrong>Bind on:\u003C\u002Fstrong> the task that writes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Kind:\u003C\u002Fstrong> MCP. \u003Cstrong>Tool type:\u003C\u002Fstrong> \u003Ccode>outrank\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MCP server URL:\u003C\u002Fstrong> your bridge's address.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Auth:\u003C\u002Fstrong> Bearer token \u002F PAT, and your bearer token.\u003C\u002Fli>\n\u003Cli>On the task, name \u003Ccode>keywords_list\u003C\u002Fcode>, \u003Ccode>keywords_get\u003C\u002Fcode>, and \u003Ccode>keywords_update\u003C\u002Fcode>. Declare a gate on \u003Ccode>keywords_update\u003C\u002Fcode>\nwhen a person should see each answer first.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Check it.\u003C\u002Fstrong> Run the task. The run page shows the keyword list, and an update that is not the complete\nquestion set comes back refused, with the keyword unchanged in Outrank.\u003C\u002Fli>\n\u003C\u002Fol>\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>\u003Ccode>tool_not_bound:outrank\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>No Outrank connection reaches this run\u003C\u002Ftd>\n\u003Ctd>Bind it on this task, or at a layer the run reaches\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The run's log says \u003Ccode>tool.not_offered\u003C\u002Fcode> for an Outrank tool\u003C\u002Ftd>\n\u003Ctd>Your bridge did not answer when the run started, or offers no tool by that name\u003C\u002Ftd>\n\u003Ctd>Check the bridge is reachable, and that it offers the tool by that name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Calls fail with an auth error\u003C\u002Ftd>\n\u003Ctd>The bearer token in the binding is not the one your bridge expects\u003C\u002Ftd>\n\u003Ctd>Edit the binding and paste the token again\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>A call is refused because of the product\u003C\u002Ftd>\n\u003Ctd>The call names a product other than the one the bridge is pinned to\u003C\u002Ftd>\n\u003Ctd>Name that product, or point the bridge at the product this task writes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>An update is refused and the keyword is unchanged\u003C\u002Ftd>\n\u003Ctd>The body is not the complete current question list, the wording changed, or an answer is over 1000 characters\u003C\u002Ftd>\n\u003Ctd>Re-read the keyword and send every question, wording unchanged, with each answer as text\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n",[13,17,20,23,26,30,33],{"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},"run-outranks-mcp-server","Run Outrank's MCP server",3,{"id":31,"text":32,"level":29,"planned":9},"connect-it","Connect it",{"id":34,"text":35,"level":16,"planned":9},"troubleshooting","Troubleshooting",1791124519806]