1"use strict";(globalThis.webpackChunkgoose=globalThis.webpackChunkgoose||[]).push([[2655],{8732:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>x,contentTitle:()=>c,default:()=>m,frontMatter:()=>h,metadata:()=>i,toc:()=>p});const i=JSON.parse('{"id":"mcp/apify-mcp","title":"Apify Extension","description":"Add Apify MCP server as a goose Extension","source":"@site/docs/mcp/apify-mcp.md","sourceDirName":"mcp","slug":"/mcp/apify-mcp","permalink":"/docs/mcp/apify-mcp","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Apify Extension","description":"Add Apify MCP server as a goose Extension"},"sidebar":"tutorialSidebar","previous":{"title":"Alby Bitcoin Payments Extension","permalink":"/docs/mcp/alby-mcp"},"next":{"title":"Apps Extension","permalink":"/docs/mcp/apps-mcp"}}');var o=t(74848),s=t(28453),a=t(11470),r=t(19365),l=t(71654),d=t(10931);const h={title:"Apify Extension",description:"Add Apify MCP server as a goose Extension"},c=void 0,x={},p=[{value:"Configuration",id:"configuration",level:2},{value:"Example Usage",id:"example-usage",level:2},{value:"goose Prompt",id:"goose-prompt",level:3},{value:"goose Output",id:"goose-output",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(n.p,{children:["This tutorial covers how to add the ",(0,o.jsx)(n.a,{href:"https://mcp.apify.com",children:"Apify MCP server"})," as a goose extension, enabling goose to call thousands of tools from ",(0,o.jsx)(n.a,{href:"https://apify.com/store",children:"Apify Store"})," to extract data from social media, e-commerce sites, search engines, online maps, or any other website."]}),"\n",(0,o.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(a.A,{groupId:"remote-or-local",children:[(0,o.jsxs)(r.A,{value:"remote",label:"Apify Remote MCP",default:!0,children:[(0,o.jsxs)(n.admonition,{title:"Quick Install",type:"tip",children:[(0,o.jsxs)(a.A,{groupId:"interface",children:[(0,o.jsx)(r.A,{value:"ui",label:"goose Desktop",default:!0,children:(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"goose://extension?type=streamable_http&url=https%3A%2F%2Fmcp.apify.com&id=apify&name=Apify&description=Extract%20data%20from%20any%20website%20with%20thousands%20of%20scrapers%2C%20crawlers%2C%20and%20automations%20on%20Apify%20Store&header=Authorization%3DBearer%20YOUR_APIFY_TOKEN",children:"Launch the installer"})})}),(0,o.jsxs)(r.A,{value:"cli",label:"goose CLI",children:[(0,o.jsxs)(n.p,{children:["Add a ",(0,o.jsx)(n.code,{children:"Remote Extension (Streamable HTTP)"})," extension type with:"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Endpoint URL"})}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"https://mcp.apify.com\n"})})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Custom Request Header"})}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"Authorization: Bearer <YOUR_APIFY_TOKEN>\n"})})]}),(0,o.jsxs)(a.A,{groupId:"interface",children:[(0,o.jsx)(r.A,{value:"ui",label:"goose Desktop",default:!0,children:(0,o.jsx)(d.A,{extensionId:"apify",extensionName:"Apify",description:"Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store",type:"http",url:"https://mcp.apify.com",envVars:[{name:"Authorization",label:"Bearer YOUR_APIFY_TOKEN"}],apiKeyLink:"https://console.apify.com/settings/integrations",apiKeyLinkText:"Apify Token"})}),(0,o.jsx)(r.A,{value:"cli",label:"goose CLI",children:(0,o.jsx)(l.A,{name:"Apify",description:"Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store",type:"http",url:"https://mcp.apify.com",timeout:300,envVars:[{key:"Authorization",value:"Bearer apify_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}],infoNote:(0,o.jsxs)(o.Fragment,{children:["Obtain your ",(0,o.jsx)(n.a,{href:"https://console.apify.com/settings/integrations",target:"_blank",rel:"noopener noreferrer",children:"Apify Token"})," and paste it in as the ",(0,o.jsx)(n.code,{children:"Bearer"})," token."]})})})]})]}),(0,o.jsxs)(r.A,{value:"local",label:"Apify Local MCP",children:[(0,o.jsxs)(n.admonition,{title:"Quick Install",type:"tip",children:[(0,o.jsxs)(a.A,{groupId:"interface",children:[(0,o.jsx)(r.A,{value:"ui",label:"goose Desktop",default:!0,children:(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"goose://extension?cmd=npx&arg=@apify/
1actors-mcp-server&arg=start&id=mcp_apify_local&name=Apify%20Local%20MCP%20Server&description=Run%20Apify%20MCP%20server%20locally%20using%20your%20token&env=APIFY_TOKEN%3DYour%20Apify%20Token",children:"Launch the installer"})})}),(0,o.jsxs)(r.A,{value:"cli",label:"goose CLI",children:[(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Command"})}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-sh",children:"npx -y @apify/actors-mcp-server\n"})})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Environment Variables"})}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"APIFY_TOKEN: <YOUR_APIFY_TOKEN>\n"})})]}),(0,o.jsxs)(a.A,{groupId:"interface",children:[(0,o.jsx)(r.A,{value:"ui",label:"goose Desktop",default:!0,children:(0,o.jsx)(d.A,{extensionId:"mcp_apify_local",extensionName:"Apify Local MCP Server",description:"Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store",type:"stdio",command:"npx",args:["-y","@apify/actors-mcp-server"],envVars:[{name:"APIFY_TOKEN",label:"<YOUR_APIFY_TOKEN>"}],apiKeyLink:"https://console.apify.com/settings/integrations",apiKeyLinkText:"Apify Token"})}),(0,o.jsx)(r.A,{value:"cli",label:"goose CLI",children:(0,o.jsx)(l.A,{name:"Apify Local MCP Server",description:"Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store",type:"stdio",command:"npx -y @apify/actors-mcp-server",timeout:300,envVars:[{key:"APIFY_TOKEN",value:"apify_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}],infoNote:(0,o.jsxs)(o.Fragment,{children:["Obtain your ",(0,o.jsx)(n.a,{href:"https://console.apify.com/settings/integrations",target:"_blank",rel:"noopener noreferrer",children:"Apify Token"})," and paste it in."]})})})]})]})]}),"\n",(0,o.jsx)(n.h2,{id:"example-usage",children:"Example Usage"}),"\n",(0,o.jsxs)(n.p,{children:["The Apify MCP server lets you connect goose to ",(0,o.jsx)(n.a,{href:"https://apify.com/store",children:"Apify Store"}),", a marketplace of thousands of ready-made tools (called ",(0,o.jsx)(n.em,{children:"Actors"}),") for all kinds of web scraping, crawling, and data extraction use cases. Learn more about Apify Actors in the ",(0,o.jsx)(n.a,{href:"https://docs.apify.com/platform/actors",children:"official documentation"})]}),"\n",(0,o.jsxs)(n.p,{children:["In this example, goose will use the ",(0,o.jsx)(n.a,{href:"https://apify.com/compass/crawler-google-places",children:"Google Places Scraper"})," Actor to identify the most credible, top-rated Italian restaurant in Prague based on public ratings, reviews, and fine-dining recognition."]}),"\n",(0,o.jsx)(n.h3,{id:"goose-prompt",children:"goose Prompt"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"\n( O)> Find the top-rated Italian restaurant in Prague with verifiable credibility \u2014 use Apify MCP to find Google Maps review scraper Actor, focus on places with at least 200+ reviews, an average rating of 4.7 or higher on Google, TripAdvisor, or OpenTable, and any Michelin or fine-dining recognition. Include the restaurant\u2019s name, rating, total review count, address, cuisine style, and a short summary of what makes it stand out (e.g., service, ambiance, or signature dishes). Return to me only 1 restaurant with the highest rating to review count ratio\n\n"})}),"\n",(0,o.jsx)(n.h3,{id:"goose-output",children:"goose Output"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"\nBased on the gathered information, the top-rated Italian restaurant in Prague with verifiable credibility is:\n\n### **Al Tagliere**\n\n* **Rating:** 4.7/5\n* **Total Reviews:** 457\n* **Address:** [Al Tagliere on TripAdvisor](https://www.tripadvisor.com/Restaurant_Review-g274707-d6835155-Reviews-Al_Tagliere-Prague_Bohemia.html)\n* **Cuisine Style:** Italian\n* **Summary:** Al Tagliere is celebrated for its authentic Italian dishes that showcase regional flavors. The restaurant is known for its delightful ambiance, attentive service, and signature dishes such as homemade pasta and traditional desserts. Patrons frequently highlight the freshness of ingredients and the welcoming atmosphere, making it a preferred choice for both locals and tourists.\n\nThis restaurant has a strong reputation and meets your criteria for quality and credibility.\n\n"})})]})}function m(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}}
1,10931:(e,n,t)=>{t.d(n,{A:()=>s});t(96540);var i=t(71112),o=t(74848);function s({extensionId:e,extensionName:n,description:t,type:s,command:a,args:r,url:l,envVars:d=[],apiKeyLink:h,apiKeyLinkText:c,customStep3:x,hasEnvVars:p,appendToStep3:u}){const m=s||(a?"stdio":l?"http":"stdio"),g=(()=>{if(x)return x;if(h&&c)return(0,o.jsxs)(o.Fragment,{children:["Get your ",(0,o.jsx)("a",{href:h,children:c})," and paste it in"]});if(d.length>0){const e=d.map(e=>e.name).join(", "),n="http"===m,t=n?"header":"environment variable",i=n?"headers":"environment variables";return`Obtain your ${e} and paste ${d.length>1?`them as ${i}`:`it as a ${t}`}`}return null})(),f=u?(0,o.jsxs)(o.Fragment,{children:[g,g?(0,o.jsx)("br",{}):null,u]}):g,y=p??null!==f;return(0,o.jsx)("div",{children:(0,o.jsxs)("ol",{children:[(0,o.jsx)("li",{children:(0,o.jsx)("a",{href:(()=>{let i=[];"http"===m&&i.push("type=streamable_http"),l?i.push(`url=${encodeURIComponent(l)}`):a&&r&&(i.push(`cmd=${encodeURIComponent(a)}`),i.push(...r.map(e=>`arg=${encodeURIComponent(e)}`))),i.push(`id=${encodeURIComponent(e)}`,`name=${encodeURIComponent(n)}`,`description=${encodeURIComponent(t)}`);const o="http"===m?"header":"env";return i.push(...d.map(e=>`${o}=${encodeURIComponent(`${e.name}=${e.label}`)}`)),`goose://extension?${i.join("&")}`})(),children:"Launch the installer"})}),(0,o.jsxs)("li",{children:["Click ",(0,o.jsx)("code",{children:"Yes"})," to confirm the installation"]}),y&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("li",{children:f}),(0,o.jsxs)("li",{children:["Click ",(0,o.jsx)("code",{children:"Add Extension"})]})]}),(0,o.jsxs)("li",{children:["Click the ",(0,o.jsx)(i.A,{className:"inline",size:16})," button in the top-left to open the sidebar"]}),(0,o.jsx)("li",{children:"Navigate to the chat"})]})})}},71654:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var i=t(83457),o=t(27293),s=t(74848);function a({name:e,description:n,type:t="stdio",command:a,url:r,timeout:l=300,envVars:d=[],infoNote:h,commandNote:c}){const x=d.length>0,p="http"===t,u=p,m=p?"Would you like to add custom headers?":"Would you like to add environment variables?";x&&d.length;return(0,s.jsxs)("div",{children:[(0,s.jsx)("ol",{children:(0,s.jsxs)("li",{children:["Run the ",(0,s.jsx)("code",{children:"configure"})," command:"]})}),(0,s.jsx)(i.A,{language:"sh",children:"goose configure"}),(0,s.jsx)("ol",{start:2,children:(0,s.jsxs)("li",{children:["Choose to add a"," ",(0,s.jsx)("code",{children:p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}),"."]})}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure\n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c6 What type of extension would you like to add?\n${p?"\u2502 \u25cb Built-in Extension\n\u2502 \u25cb Command-line Extension\n// highlight-start\n\u2502 \u25cf Remote Extension (Streamable HTTP) (Connect to a remote extension via MCP Streamable HTTP)\n// highlight-end":"\u2502 \u25cb Built-in Extension\n// highlight-start\n\u2502 \u25cf Command-line Extension (Run a local command or script)\n// highlight-end\n\u2502 \u25cb Remote Extension (Streamable HTTP)"}\n\u2514`}),(0,s.jsx)("ol",{start:3,children:(0,s.jsx)("li",{children:"Give your extension a name."})}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 ${p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}\n\u2502\n// highlight-start\n\u25c6 What would you like to call this extension?\n\u2502 ${e}\n// highlight-end\n\u2514`}),u?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("ol",{start:4,children:(0,s.jsx)("li",{children:"Enter the Streamable HTTP endpoint URI."})}),c&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.A,{type:"info",children:c}),(0,s.jsx)("br",{})]}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension \n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 Remote Extension (Streamable HTTP)\n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}
1\n\u2502\n// highlight-start\n\u25c6 What is the Streamable HTTP endpoint URI?\n\u2502 ${r}\n// highlight-end\n\u2514`})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("ol",{start:4,children:(0,s.jsx)("li",{children:"Enter the command to run when this extension is used."})}),c&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.A,{type:"info",children:c}),(0,s.jsx)("br",{})]}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 Command-line Extension \n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}\n\u2502\n// highlight-start\n\u25c6 What command should be run?\n\u2502 ${a}\n// highlight-end\n\u2514`})]}),(0,s.jsx)("ol",{start:5,children:(0,s.jsxs)("li",{children:["Enter the number of seconds goose should wait for actions to complete before timing out. Default is"," ",(0,s.jsx)("code",{children:"300"})," seconds."]})}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 ${p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}\n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}\n\u2502\n${u?`\u25c7 What is the Streamable HTTP endpoint URI?\n\u2502 ${r}\n\u2502`:`\u25c7 What command should be run?\n\u2502 ${a}\n\u2502`}\n// highlight-start\n\u25c6 Please set the timeout for this tool (in secs):\n\u2502 ${l}\n// highlight-end\n\u2514`}),(0,s.jsx)("ol",{start:6,children:(0,s.jsx)("li",{children:"Enter a description for this extension."})}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 ${p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}\n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}\n\u2502\n${u?`\u25c7 What is the Streamable HTTP endpoint URI?\n\u2502 ${r}\n\u2502`:`\u25c7 What command should be run?\n\u2502 ${a}\n\u2502`}\n\u25c7 Please set the timeout for this tool (in secs):\n\u2502 ${l}\n\u2502\n// highlight-start\n\u25c6 Enter a description for this extension:\n\u2502 ${n}\n// highlight-end\n\u2514`}),(0,s.jsx)("ol",{start:7,children:(0,s.jsx)("li",{children:x?p?(0,s.jsxs)(s.Fragment,{children:["Add ",d.length>1?"custom headers":"a custom header"," for this extension."]}):(0,s.jsxs)(s.Fragment,{children:["Add ",d.length>1?"environment variables":"an environment variable"," for this extension."]}):p?(0,s.jsxs)(s.Fragment,{children:["Choose ",(0,s.jsx)("code",{children:"No"})," when asked to add custom headers."]}):(0,s.jsxs)(s.Fragment,{children:["Choose ",(0,s.jsx)("code",{children:"No"})," when asked to add environment variables."]})})}),!x&&(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension \n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 ${p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}\n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}\n\u2502\n${u?`\u25c7 What is the Streamable HTTP endpoint URI?\n\u2502 ${r}\n\u2502`:`\u25c7 What command should be run?\n\u2502 ${a}\n\u2502`}\n\u25c7 Please set the timeout for this tool (in secs):\n\u2502 ${l}\n\u2502\n\u25c7 Enter a description for this extension:\n\u2502 ${n}
1\n\u2502\n// highlight-start\n\u25c6 ${m}\n\u2502 No\n// highlight-end\n\u2502\n\u2514 Added ${e} extension`}),x&&(0,s.jsxs)(s.Fragment,{children:[h&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.A,{type:"info",children:h}),(0,s.jsx)("br",{})]}),(0,s.jsx)(i.A,{language:"sh",children:`\u250c goose-configure \n\u2502\n\u25c7 What would you like to configure?\n\u2502 Add Extension\n\u2502\n\u25c7 What type of extension would you like to add?\n\u2502 ${p?"Remote Extension (Streamable HTTP)":"Command-line Extension"}\n\u2502\n\u25c7 What would you like to call this extension?\n\u2502 ${e}\n\u2502\n${u?`\u25c7 What is the Streamable HTTP endpoint URI?\n\u2502 ${r}\n\u2502`:`\u25c7 What command should be run?\n\u2502 ${a}\n\u2502`}\n\u25c7 Please set the timeout for this tool (in secs):\n\u2502 ${l}\n\u2502\n\u25c7 Enter a description for this extension:\n\u2502 ${n}\n\u2502\n// highlight-start\n\u25c6 ${m}\n\u2502 Yes\n${d.map(({key:e,value:n},t)=>`\u2502\n\u25c7 ${p?"Header name":"Environment variable name"}:\n\u2502 ${e}\n\u2502\n\u25c7 ${p?"Header value":"Environment variable value"}:\n\u2502 ${n}\n\u2502\n\u25c7 Add another ${p?"header":"environment variable"}?\n\u2502 ${t===d.length-1?"No":"Yes"}`).join("\n")}\n// highlight-end\n\u2502\n\u2514 Added ${e} extension`})]})]})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.