Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions documentation/docs/guides/interactive-chat/mcp-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
sidebar_position: 1
title: MCP-UI Extensions
sidebar_label: MCP-UI Extensions
description: Learn how Goose can render graphical and interactive UI components from MCP-UI-enabled extensions
description: Learn how goose can render graphical and interactive UI components from MCP-UI-enabled extensions
---

import Tabs from '@theme/Tabs';
Expand All @@ -11,7 +11,7 @@ import GooseDesktopInstaller from '@site/src/components/GooseDesktopInstaller';
import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions';
import { PanelLeft } from 'lucide-react';

Extensions built on MCP-UI allow Goose Desktop to provide interactive and engaging user experiences. Imagine using a graphical, clickable UI instead of reading text responses and typing all your prompts:
Extensions built on MCP-UI allow goose Desktop to provide interactive and engaging user experiences. Imagine using a graphical, clickable UI instead of reading text responses and typing all your prompts:

<div style={{ width: '100%', maxWidth: '800px', margin: '0 auto' }}>
<video
Expand All @@ -29,11 +29,11 @@ Extensions built on MCP-UI allow Goose Desktop to provide interactive and engagi
</div>

<br/>
MCP-UI-enabled extensions return content that Goose can render as embedded UI elements for rich, dynamic, and streamlined interactions.
MCP-UI-enabled extensions return content that goose can render as embedded UI elements for rich, dynamic, and streamlined interactions.

## Try It Out

See how interactive responses work in Goose.
See how interactive responses work in goose.

### Add Enabled Extension

Expand All @@ -52,6 +52,7 @@ For this exercise, we'll add an MCP-UI-enabled extension that connects to [MCP-U
<TabItem value="cli" label="goose CLI">
<CLIExtensionInstructions
name="rich_demo"
description="Demo MCP-UI-enabled extension"
type="http"
url="https://mcp-aharvard.netlify.app/mcp"
timeout={300}
Expand All @@ -61,7 +62,7 @@ For this exercise, we'll add an MCP-UI-enabled extension that connects to [MCP-U

### Interact in Chat

In Goose Desktop, ask:
In goose Desktop, ask:

- `Help me select seats for my flight`

Expand Down
126 changes: 80 additions & 46 deletions documentation/docs/mcp/_template_.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: {Extension Name} Extension
description: Add {Extension Name} MCP Server as a Goose Extension
description: Add {Extension Name} MCP Server as a goose Extension
---

import Tabs from '@theme/Tabs';
Expand All @@ -14,7 +14,7 @@ import GooseBuiltinInstaller from '@site/src/components/GooseBuiltinInstaller';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/VIDEO_ID" />


This tutorial covers how to add the [{Extension Name} MCP Server](/) as a Goose extension to enable file operations, repository management, search functionality, and more.
This tutorial covers how to add the [{Extension Name} MCP Server](/) as a goose extension to enable ________________.

:::tip TLDR
<Tabs groupId="interface">
Expand All @@ -38,55 +38,89 @@ This tutorial covers how to add the [{Extension Name} MCP Server](/) as a Goose

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
<!-- For external MCP servers (npx, uvx, git, etc.) -->
<GooseDesktopInstaller
extensionId="{extension_id}"
extensionName="{Extension Name}"
description="{Extension description}"
command="npx"
args={["-y", "@package/name"]}
cliCommand="{command}"
timeout={300}
note="Note that you'll need Node.js installed on your system to run this command, as it uses npx."
/>

<!-- For built-in extensions -->
<GooseBuiltinInstaller
extensionName="{Extension Name}"
description="{Extension description}"
extensionId="{extension_id}"
/>

<!-- For external MCP servers with environment variables -->
<GooseDesktopInstaller
extensionId="{extension_id}"
extensionName="{Extension Name}"
description="{Extension description}"
command="npx"
args={["-y", "@package/name"]}
cliCommand="{command}"
timeout={300}
envVars={[
{ key: "API_KEY", value: "••••••••••••••••" }
]}
infoNote={
<>
Get your API key from{" "}
<a href="https://example.com/api-keys" target="_blank" rel="noopener noreferrer">
example.com
</a>.
</>
}
note="Note that you'll need Node.js installed on your system to run this command, as it uses npx."
/>
</TabItem>

<!-- For built-in extensions -->
<GooseBuiltinInstaller
extensionName="{Extension Name}"
description="{Extension description}"
extensionId="{extension_id}"
/>

<!-- For external STDIO MCP servers (npx, uvx, git, etc.) -->
<GooseDesktopInstaller
extensionId="{extension_id}"
extensionName="{Extension Name}"
description="{Extension description}"
type="stdio"
command="npx"
args={["-y", "@package/name"]}
timeout={300}
envVars={[
{ name: "API_KEY", label: "••••••••••••••••" }
]}
apiKeyLink="https://example.com/api-keys"
apiKeyLinkText="Service Access Token"
/>

<!-- For external SSE or HTTP MCP servers -->
<GooseDesktopInstaller
extensionId="{extension_id}"
extensionName="{Extension Name}"
description="{Extension description}"
type="sse" // or "http"
url="https://example-server.com/endpoint"
envVars={[ // also used for http request headers
{ name: "SOME_KEY", label: "Description or placeholder value" }
]}
apiKeyLink="https://example.com/api-keys"
apiKeyLinkText="Service Access Token"
/>

</TabItem>
<TabItem value="cli" label="goose CLI">
<CLIExtensionInstructions

<!-- For external STDIO MCP servers (npx, uvx, git, etc.) -->
<CLIExtensionInstructions
name="{Extension Name}"
command="{command}"
description="{Extension description}"
type="stdio"
command="{full command with args}"
timeout={300}
envVars={[
{ key: "API_KEY", value: "••••••••••••••••" }
]}
infoNote={
<>
Get your API key from
<a href="https://example.com/api-keys" target="_blank" rel="noopener noreferrer">
example.com
</a> and paste it in.
</>
}
/>

<!-- For external SSE or HTTP MCP servers -->
<CLIExtensionInstructions
name="{Extension Name}"
description="{Extension description}"
type="sse" // or "http"
url="https://example-server.com/endpoint"
timeout={300}
envVars={[ // also used for http request headers
{ key: "API_KEY", value: "••••••••••••••••" }
]}
infoNote={
<>
Get your API key from{" "}
<a href="https://example.com/api-keys" target="_blank" rel="noopener noreferrer">
example.com
</a>.
</>
}
/>

</TabItem>
</Tabs>

## Example Usage

Expand Down
97 changes: 52 additions & 45 deletions documentation/docs/mcp/apify-mcp.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions';
import GooseDesktopInstaller from '@site/src/components/GooseDesktopInstaller';
import { PanelLeft } from 'lucide-react';

This tutorial covers how to add the [Apify MCP server](https://mcp.apify.com) as a goose extension, enabling goose to call thousands of tools from [Apify Store](https://apify.com/store) to extract data from social media, e-commerce sites, search engines, online maps, or any other website.

Expand All @@ -20,50 +19,56 @@ This tutorial covers how to add the [Apify MCP server](https://mcp.apify.com) as
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
Use `Add custom extension` in Settings → Extensions to add a `Streamable HTTP` extension type with:
[Launch the installer](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)
</TabItem>
<TabItem value="cli" label="goose CLI">
Use `goose configure` to add a `Remote Extension (Streaming HTTP)` extension type with:
Add a `Remote Extension (Streaming HTTP)` extension type with:

**Endpoint URL**
```
https://mcp.apify.com
```
</TabItem>
</Tabs>

**Endpoint URL**
```
https://mcp.apify.com
```
**Custom Request Header**
```
Authorization: Bearer <YOUR_APIFY_TOKEN>
```
:::

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
1. Obtain an [Apify Token](https://console.apify.com/settings/integrations)
2. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
3. Click `Extensions`
4. Click `Add custom extension`
5. On the `Add custom extension` modal, enter the following:
- **Extension Name**: Apify
- **Type**: Streamable HTTP
- **Endpoint**: `https://mcp.apify.com`
- **Request Headers**:
- **Header name**: `Authorization`
- **Value**: `Bearer <YOUR_APIFY_TOKEN>`
6. Click `+ Add` to save the header
7. Click `Add Extension` to save the extension
9. Navigate to the chat
<GooseDesktopInstaller
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"
/>
</TabItem>

<TabItem value="cli" label="goose CLI">
<CLIExtensionInstructions
name="apify-mcp"
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={
<>
Obtain your <a href="https://console.apify.com/settings/integrations" target="_blank" rel="noopener noreferrer">Apify Token</a> and paste it in as the <code>Bearer</code> token.
</>
}
/>
:::info
Obtain your <a href="https://console.apify.com/settings/integrations" target="_blank" rel="noopener noreferrer">Apify Token</a> and paste it in.
:::
</TabItem>
</Tabs>

Expand Down Expand Up @@ -94,35 +99,37 @@ APIFY_TOKEN: <YOUR_APIFY_TOKEN>

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
1. Obtain an [Apify Token](https://console.apify.com/settings/integrations)
2. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
3. Click `Extensions`
4. Click `Add custom extension`
5. On the `Add custom extension` modal, enter the following:
- **Extension Name**: Apify
- **Type**: STDIO
- **Command**: `npx -y @apify/actors-mcp-server`
- **Environment Variables**:
- **Variable name**: `APIFY_TOKEN`
- **Value**: `<YOUR_APIFY_TOKEN>`
6. Click `+ Add` to save the header
7. Click `Add Extension` to save the extension
9. Navigate to the chat
<GooseDesktopInstaller
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"
/>
</TabItem>

<TabItem value="cli" label="goose CLI">
<CLIExtensionInstructions
name="apify-mcp"
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={
<>
Obtain your <a href="https://console.apify.com/settings/integrations" target="_blank" rel="noopener noreferrer">Apify Token</a> and paste it in.
</>
}
/>
:::info
Obtain your <a href="https://console.apify.com/settings/integrations" target="_blank" rel="noopener noreferrer">Apify Token</a> and paste it in.
:::
</TabItem>
</Tabs>

Expand All @@ -135,15 +142,15 @@ The Apify MCP server lets you connect goose to [Apify Store](https://apify.com/s

In this example, goose will use the [Google Places Scraper](https://apify.com/compass/crawler-google-places) Actor to identify the most credible, top-rated Italian restaurant in Prague based on public ratings, reviews, and fine-dining recognition.

### Goose Prompt
### goose Prompt

```

( O)> Find the top-rated Italian restaurant in Prague with verifiable credibility — 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’s 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

```

### Goose Output
### goose Output

```

Expand Down
Loading