Reorganizing tutorials (#3028)

This commit is contained in:
Angie Jones
2025-06-22 17:24:55 -05:00
committed by GitHub
parent 6dbb4737f8
commit 0c81198ac4
65 changed files with 231 additions and 79 deletions

View File

@@ -3,6 +3,6 @@
"position": 4,
"link": {
"type": "generated-index",
"description": "How to integrate and use MCP servers as Goose extensions"
"description": "How to use Goose in various ways"
}
}

View File

@@ -1,323 +0,0 @@
---
title: AgentQL Extension
description: Add AgentQL MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<!-- <YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/VIDEO_ID" /> -->
This tutorial covers how to add the [AgentQL MCP Server](https://github.com/tinyfish-io/agentql-mcp) as a Goose extension to extract and transform unstructured web content into structured data.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=agentql-mcp&id=agentql&name=AgentQL&description=Transform%20unstructured%20web%20content%20into%20structured%20data&env=AGENTQL_API_KEY%3DAgentQL%20API%20Key)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y agentql-mcp
```
</TabItem>
</Tabs>
**Environment Variable**
```
AGENTQL_API_KEY: <YOUR_API_KEY>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=agentql-mcp&id=agentql&name=AgentQL&description=Transform%20unstructured%20web%20content%20into%20structured%20data&env=AGENTQL_API_KEY%3DAgentQL%20API%20Key)
2. Press `Yes` to confirm the installation
3. Obtain an [AGENTQL_API_KEY](https://dev.agentql.com/api-keys) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ agentql
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ agentql
// highlight-start
◆ What command should be run?
│ npx -y agentql-mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ agentql
◇ What command should be run?
│ npx -y agentql-mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ agentql
◇ What command should be run?
│ npx -y agentql-mcp
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain an [AgentQL API Key](https://dev.agentql.com/api-keys) and paste it in.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ agentql
◇ What command should be run?
│ npx -y agentql-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ AGENTQL_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added agentql extension
```
</TabItem>
</Tabs>
## Example Usage
Let's use the AgentQL extension to gather and structure tech conference data to help plan speaking engagements.
:::info LLM
Anthropic's Claude 3.5 Sonnet was used for this task.
:::
### Goose Prompt
```
I'm a tech conference speaker planning my 2025-2026 submissions.
Extract for developer conferences (attendance > 500) occurring between 2022-2024:
- Conference name
- Conference dates
- CFP timeline
To identify:
- Consistent monthly patterns
- Whether conferences stick to same months yearly
- If CFP windows are consistent year-to-year
- Any shifts in traditional timing
Structure results as JSON
```
### Goose Output
```
I'll help you analyze conference patterns using the web data extraction tool. Let me break this down into a few queries to get comprehensive data.
─── extract-web-data | agentql ──────────────────────────
prompt: ...
url: ...
Let me get some historical data to compare patterns:
─── extract-web-data | agentql ──────────────────────────
prompt: ....
url: ....
Based on my research and the available data, I'll provide an analysis of major tech conference patterns. Here's the structured JSON with my findings:
{
"analysis": {
"major_conference_patterns": {
"timing_consistency": {
"spring_events": {
"typical_months": ["March", "April", "May"],
"notable_conferences": [
"Google I/O",
"Microsoft Build",
"DevOpsDays (various locations)"
],
"cfp_patterns": "Usually opens 4-6 months before event, closes 2-3 months before"
},
"fall_events": {
"typical_months": ["September", "October", "November"],
"notable_conferences": [
"AWS re:Invent",
"KubeCon + CloudNativeCon"
],
"cfp_patterns": "Usually opens 6-8 months before event, closes 4-5 months before"
}
},
"observed_trends": {
"timing_consistency": "High - Most major conferences maintain consistent months year-over-year",
"cfp_windows": {
"typical_duration": "6-12 weeks",
"advance_notice": "4-8 months before event",
"variation": "Regional events tend to have shorter CFP windows (4-6 weeks)"
},
"recent_shifts": [
"Increased hybrid/virtual options post-2022",
"More regional editions of major conferences",
"Earlier CFP deadlines for larger events"
]
}
},
"recommendations_for_2025_2026": {
"spring_submissions": {
"prepare_by": "September-October of previous year",
"submit_during": "November-December of previous year"
},
"fall_submissions": {
"prepare_by": "February-March",
"submit_during": "March-April"
}
}
}
}
Key Insights for Your Planning:
1. **Monthly Patterns**:
- Spring conference season: March-May
- Fall conference season: September-November
- Summer tends to be lighter for major tech conferences
- December-January typically quiet except for regional events
2. **Year-to-Year Consistency**:
- Major conferences (AWS re:Invent, KubeCon, Google I/O) are very consistent with their timing
- Regional versions of major conferences (like DevOpsDays) show more date flexibility
- Most maintain the same quarter/season year over year
3. **CFP Windows**:
- Larger conferences: 6-8 months before event
- Regional conferences: 3-4 months before event
- Trend toward longer review periods for major conferences
- Many now have rolling or multi-phase CFP processes
4. **Recent Shifts**:
- Earlier CFP deadlines compared to pre-2022
- More hybrid/virtual components
- Increased number of regional editions of major conferences
- Longer review periods for submissions
For 2025-2026 planning, I recommend:
- Start preparing fall 2025 submissions by February-March 2025
- Start preparing spring 2026 submissions by September-October 2025
- Consider regional versions of major conferences as they often have later deadlines
- Keep track of multi-track conferences as they might have different CFP deadlines for different tracks
Would you like me to focus on any specific aspect of these patterns or provide more detailed information about particular conferences?
```

View File

@@ -1,323 +0,0 @@
---
title: Asana Extension
description: Add Asana MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<!--<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/VIDEO_ID" />-->
This tutorial covers how to add the [Asana MCP Server](https://github.com/roychri/mcp-server-asana) as a Goose extension to enable task automation, project tracking, and team collaboration.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40roychri%2Fmcp-server-asana&id=asana&name=Asana&description=enable%20task%20automation%2C%20project%20tracking%2C%20and%20team%20collaboration&env=ASANA_ACCESS_TOKEN%3DAsana%20Access%20Token)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @roychri/mcp-server-asana
```
</TabItem>
</Tabs>
**Environment Variable**
```
ASANA_ACCESS_TOKEN: <YOUR_TOKEN>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40roychri%2Fmcp-server-asana&id=asana&name=Asana&description=enable%20task%20automation%2C%20project%20tracking%2C%20and%20team%20collaboration&env=ASANA_ACCESS_TOKEN%3DAsana%20Access%20Token)
2. Press `Yes` to confirm the installation
3. Obtain a [Asana Access Token](https://app.asana.com/0/my-apps) and paste it in
:::info
See [Asana's developer docs](https://developers.asana.com/docs/personal-access-token) if you need detailed instructions on creating an access token.
:::
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ Asana
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Asana
// highlight-start
◆ What command should be run?
│ npx -y @roychri/mcp-server-asana
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Asana
◇ What command should be run?
│ npx -y @roychri/mcp-server-asana
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Asana
◇ What command should be run?
│ npx -y @roychri/mcp-server-asana
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain a [Asana Access Token](https://app.asana.com/0/my-apps) and paste it in.
:::info
See [Asana's developer docs](https://developers.asana.com/docs/personal-access-token) if you need detailed instructions on creating an access token.
:::
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Asana
◇ What command should be run?
│ npx -y @roychri/mcp-server-asana
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ ASANA_ACCESS_TOKEN
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added Asana extension
```
</TabItem>
</Tabs>
## Example Usage
:::info LLM
OpenAI's GPT-4o was used for this task. There's an [open bug](https://github.com/block/goose/issues/1804) for Amazon Bedrock models.
:::
### Goose Prompt
> _Goose, I have one hour. Look through uncompleted tasks assigned to me in Asana and show me ones that you estimate will take an hour or less. Order them by deadline._
### Goose Output
Note that IDs have been changed to generic ones
:::note CLI
<details>
<summary>Tool Calls</summary>
─── asana_search_tasks | abcdefgh ──────────────────────────
assignee.any: me
completed: false
workspace: 1234567890123
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000001
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000002
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000003
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000004
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000005
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000006
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000007
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000008
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000009
─── asana_get_task | abcdefgh ──────────────────────────
opt_fields: due_on,estimated_hours
task_id: 1100000000000010
</details>
Here are your uncompleted tasks in Asana estimated to take an hour or less, ordered by their deadline:
1. **Task:** Review team meeting notes
- **Due Date:** 2025-03-21
2. **Task:** Draft quick status update
- **Due Date:** 2025-03-21
3. **Task:** Proofread blog post
- **Due Date:** 2025-03-21
4. **Task:** Send reminder to partners
- **Due Date:** 2025-03-27
Please let me know if you'd like more information or help with any specific task!
:::

View File

@@ -1,268 +0,0 @@
---
title: Blender Extension
description: Add Blender MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/izoQatKtJ2I" />
This tutorial covers how to add the [Blender MCP Server](https://github.com/ahujasid/blender-mcp) as a Goose extension to create 3D scenes, control Blender with natural language, generate models, apply materials, and more.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&arg=blender-mcp&id=blender&name=Blender&description=Blender%203D%20scene%20creation%20integration)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx blender-mcp
```
</TabItem>
</Tabs>
:::
**Requirement**
Download [Blender Application](https://www.blender.org/download/) and [Blender MCP Addon file](https://github.com/ahujasid/blender-mcp/blob/main/addon.py)
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
1. Download [Blender Application](https://www.blender.org/download/)
2. Add Blender MCP Addon
- Download the `addon.py` file from the [Blender MCP repository](https://github.com/ahujasid/blender-mcp/blob/main/addon.py).
- Open Blender
- Navigate to `Edit` > `Preferences` > `Add-ons`.
- Click the down arrow, select `install from disk`, add the `addon.py` file you downloaded.
- After installing, check the box to enable `Blender MCP`.
3. Start Blender MCP server
- In Blender, press N to open the sidebar.
- Go to the Blender MCP tab.
- Click `connect to MCP server`
### Add Blender MCP Server
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&arg=blender-mcp&id=blender&name=Blender&description=Blender%203D%20scene%20creation%20integration)
2. Press `Yes` to confirm the installation
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ blender
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ blender
// highlight-start
◆ What command should be run?
│ uvx blender-mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ blender
◇ What command should be run?
│ uvx blender-mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ blender
◇ What command should be run?
│ uvx blender-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ blender
◇ What command should be run?
│ uvx blender-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
|
// highlight-end
└ Added blender extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, Ill show you how to use Goose with the Blender Extension to build an entire 3D campfire scene from scratch. By automating Blender controls through natural language, Goose can create objects like logs and fireballs, apply realistic materials, add lighting effects, generate particles for sparks, create subtle smoke, and even animate the fire to gently pulse over time.
In this example, Ill show you how to use Goose with the Blender Extension to build a full 3D campfire scene, including logs, fireballs, lighting, and subtle fire animation, just by describing what you want.
### Goose Prompt
> Build a cozy campfire scene. Add a ground plane, place a few logs in a circle, and add a glowing fireball in the middle. Set the lighting to a warm tone like a sunset, and angle the camera for a dramatic shot. Give the logs a rough wood texture and make the fireball emit light.
### Goose Output
:::note CLI
I'll help you create a cozy campfire scene in Blender. Let's break this down into steps and use a combination of basic objects, textures from PolyHaven, and proper lighting. First, let's check what we're working with.
─── **Get Scene Info** ───
Let's build the scene step by step:
First, let's remove the default cube and set up our ground plane:
─── **Execute Blender Code** ───
2. Now let's create the logs in a circle:
─── **Execute Blender Code** ───
3. Let's create the glowing fireball in the middle:
─── **Execute Blender Code** ───
Let me fix the fireball material:
─── **Execute Blender Code** ───
4. Finally, let's set up the lighting and camera for a dramatic sunset shot:
─── **Execute Blender Code** ───
I've created a cozy campfire scene with the following elements:
1. A large ground plane with a dark brown material
2. 5 logs arranged in a circle, with a rough wood material
3. A glowing fireball in the center with emission material
4. A point light to create the fire's glow effect
5. Adjusted the main sun light to create a warm sunset atmosphere
6. Positioned the camera for a dramatic angle
7. Set up the scene for better rendering with Cycles
The scene has a warm, cozy atmosphere with the logs arranged naturally around the glowing fireball. The lighting simulates a sunset with warm tones, and the camera is positioned to capture the scene from an interesting angle.
If you'd like to make any adjustments, such as:
- Changing the size or position of any elements
- Adjusting the lighting intensity
- Modifying the camera angle
- Adding more details like small rocks or additional logs
Just let me know and I'll help you refine the scene further!
:::
#### Blender Image
![Blender MCP Scene](/img/blender.png)

View File

@@ -1,289 +0,0 @@
---
title: Brave Search Extension
description: Add Brave Search API as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/kD2YA61NTLU" />
This tutorial will get you started with the [Brave Search MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search) as a Goose extension to enable interactive searches for both web and local searches.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-brave-search&id=brave-search&name=Brave%20Search&description=Brave%20Search%20API&env=BRAVE_API_KEY%3DYour%20API%20Key)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-brave-search
```
</TabItem>
</Tabs>
**Environment Variable**
```
BRAVE_API_KEY: <YOUR_API_KEY>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-brave-search&id=brave-search&name=Brave%20Search&description=Brave%20Search%20API&env=BRAVE_API_KEY%3DYour%20API%20Key)
2. Press `Yes` to confirm the installation
3. Get your [Brave Search API Key](https://api-dashboard.search.brave.com/app/keys) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ brave-search
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ brave-search
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-brave-search
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ brave-search
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-brave-search
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ brave-search
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-brave-search
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain a [Brave Search API Key](https://api-dashboard.search.brave.com/app/keys) and paste it in.
:::info
Sign up for a [Brave Search API account](https://brave.com/search/api/), choose a plan (the free tier gives you 2000 queries per month), and generate your API key from [the developer dashboard](https://api-dashboard.search.brave.com/app/keys).
:::
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ brave-search
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-brave-search
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ BRAVE_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added brave-search extension
```
</TabItem>
</Tabs>
## Example Usage
The Brave Search MCP server gives you access to the Brave Search API, providing both web and local search capabilities:
- **Web Search**: General queries, news, articles, with pagination and freshness controls
- **Local Search**: Find businesses, restaurants, and services with detailed information (requires a Pro API key)
- **Flexible Filtering**: Control result types, safety levels, and content freshness
- **Smart Fallbacks**: Local search automatically falls back to web when no results are found
#### Goose Prompt
```
( O)> Organize a Italian dinner party with Ian, Rizel, Ace, and Ebony. Find 3 or 4 YouTube cooking channels (with URLs) that focus on Italian cuisine for beginners, and then find one recipe (with URL) for each person to make: one salad, two entrees, and one dessert.
```
#### Goose Output
```
I'll help you organize the Italian dinner party and search for appropriate cooking resources and recipes. Let me break this down into parts.
First, let's search for some beginner-friendly Italian cooking YouTube channels:
Brave Web Search
query: best youtube channels italian cooking for beginners authenti...
Let me search for some specific recipes:
Brave Web Search
query: authentic italian salad recipes panzanella caprese insalata
Brave Web Search
query: authentic italian main course pasta recipes carbonara osso b...
Brave Web Search
query: authentic italian dessert recipes tiramisu panna cotta
Based on my research, I'll organize the dinner party plan with recommended YouTube channels and specific recipes for each person. Here's the plan:
Recommended Italian Cooking YouTube Channels for Beginners
1. Vincenzo's Plate (https://www.youtube.com/channel/UCcsSowAamCLJv-xeF9geXoA)
- Authentic Italian recipes with clear instructions
- Run by an Italian native who explains techniques well for beginners
2. Italia Squisita (https://www.youtube.com/c/ItaliaSquisita)
- Features traditional Italian recipes
- Often shows multiple ways to make classic dishes
3. Giallo Zafferano (https://www.youtube.com/user/GialloZafferano)
- Italy's most popular cooking channel
- Comprehensive collection of authentic Italian recipes
Recipe Assignments
1. Rizel - Salad Course
- Classic Panzanella (Tuscan Bread and Tomato Salad)
- Recipe: https://www.themediterraneandish.com/tomato-panzanella-salad-recipe/
- Perfect summer salad with crusty bread, tomatoes, and fresh basil
2. Ian - First Entrée
- Authentic Spaghetti Carbonara
- Recipe: https://anitalianinmykitchen.com/spaghetti-carbonara/
- Classic Roman pasta dish with eggs, pecorino, and guanciale
3. Ace - Second Entrée
- Osso Buco alla Milanese
- Recipe: https://www.pastagrammar.com/post/osso-buco-authentic-italian-veal-recipe
- Traditional Milanese braised veal shanks with gremolata
4. Ebony - Dessert
- Classic Vanilla Panna Cotta
- Recipe: https://www.recipesfromitaly.com/panna-cotta-recipe/
- Elegant, creamy dessert that can be made ahead
Tips for Success
- Watch the YouTube channels beforehand to familiarize yourself with Italian cooking techniques
- Make sure to read through the entire recipe before starting
- The Panna Cotta should be made at least 4 hours ahead (or the night before) to allow proper setting time
- The Panzanella can be assembled just before serving for the best texture
- The Osso Buco can be made slightly ahead and reheated, as it often tastes better the next day
- The Carbonara should be made just before serving and served immediately while hot
```

View File

@@ -1,246 +0,0 @@
---
title: Browserbase Extension
description: Add Browserbase MCP Server as a Goose Extension for Web Automation
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
This tutorial covers how to add the Browserbase MCP Server as a Goose extension for browser automation, enabling programmatic control over navigation, page interactions, and content capture.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=@browserbasehq/mcp&id=browserbase&name=Browserbase&description=Automate%20web%20browsing%20and%20data%20extraction&env=BROWSERBASE_PROJECT_ID%3DBrowserbase%20Project%20ID&env=BROWSERBASE_API_KEY%3DBrowserbase%20API%20Key)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx @browserbasehq/mcp
```
</TabItem>
</Tabs>
**Environment Variables**
```
BROWSERBASE_PROJECT_ID: <YOUR_PROJECT_ID>
BROWSERBASE_API_KEY: <YOUR_API_KEY>
```
:::
## Configuration
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=@browserbasehq/mcp&id=browserbase&name=Browserbase&description=Automate%20web%20browsing%20and%20data%20extraction&env=BROWSERBASE_PROJECT_ID%3DBrowserbase%20Project%20ID&env=BROWSERBASE_API_KEY%3DBrowserbase%20API%20Key)
2. Press `Yes` to confirm the installation
3. Obtain your [Browserbase Project ID and Browserbase API Key](https://browserbase.io/dashboard) and paste them in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ browserbase
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ browserbase
// highlight-start
◆ What command should be run?
│ npx @browserbasehq/mcp
// highlight-end
```
5. Enter the timeout (default 300s)
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ browserbase
◇ What command should be run?
│ npx @browserbasehq/mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Add a description (optional)
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ browserbase
◇ What command should be run?
│ npx @browserbasehq/mcp
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Add environment variables
```sh
┌ goose-configure
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ BROWSERBASE_PROJECT_ID
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ Yes
◇ Environment variable name:
│ BROWSERBASE_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added browserbase extension
```
</TabItem>
</Tabs>
## Example Usage
Let's use the Browserbase extension to gather information about trending MCP-related repositories on GitHub.
:::info LLM
Claude 3.5 Sonnet was used for this task.
:::
### Goose Prompt
```
1. Go to https://github.com/trending
2. Search for "MCP server" or scroll through and find repos with "MCP" or "Model Context Protocol" in the title or description
3. For the top 3 relevant repositories:
• Click into the repo
• Take a screenshot of the repo page
• Extract:
- Repo name
- Description
- Stars today
- First paragraph of README
• Navigate back
- Close all tabs
- Output a Markdown report showing:
• Repo name (link)
• Screenshot
• Description + Stars
• README excerpt
```
### Goose Output
```
# MCP Repositories Report
## 1. [FastMCP](https://github.com/jlowin/fastmcp)
![FastMCP Repository Screenshot]
**Description**: The fast, Pythonic way to build MCP servers and clients.
**Stars Today**: 10.2k stars
**README Excerpt**: The Model Context Protocol (MCP) is a new, standardized way to provide context and tools to your LLMs, and FastMCP makes building MCP servers and clients simple and intuitive. Create tools, expose resources, define prompts, and connect components with clean, Pythonic code.
## 2. [GitHub MCP Server](https://github.com/github/github-mcp-server)
![GitHub MCP Server Screenshot]
**Description**: GitHub's official MCP Server that provides seamless integration with GitHub APIs, enabling advanced automation and interaction capabilities for developers and tools.
**Stars Today**: 13.9k stars
**README Excerpt**: The GitHub MCP Server is a Model Context Protocol (MCP) server that provides seamless integration with GitHub APIs, enabling advanced automation and interaction capabilities for developers and tools.
## 3. [Playwright MCP](https://github.com/microsoft/playwright-mcp)
![Playwright MCP Screenshot]
**Description**: A Model Context Protocol (MCP) server that provides browser automation capabilities using Playwright.
**Stars Today**: 10.2k stars
**README Excerpt**: A Model Context Protocol (MCP) server that provides browser automation capabilities using Playwright. This server enables LLMs to interact with web pages through structured accessibility snapshots, bypassing the need for screenshots or visually-tuned models.
```

View File

@@ -1,197 +0,0 @@
---
title: Computer Controller Extension
description: Use Computer Controller MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/EuMzToNOQtw" />
The Computer Controller extension helps automate everyday computer tasks and web interactions such as searching the web, controlling system settings, processing data files, and controlling applications without needing to know how to code.
This tutorial covers enabling and using the Computer Controller MCP Server, which is a built-in Goose extension.
:::tip
Let Goose complete its tasks without interruption - avoid using your mouse or keyboard until it's done.
:::
## Configuration
1. Ensure extension is enabled:
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the upper right corner
2. Click `Advanced Settings`
3. Under `Extensions`, toggle `Computer Controller` to on.
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Built-in Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
// highlight-start
│ ● Built-in Extension (Use an extension that comes with Goose)
// highlight-end
│ ○ Command-line Extension
│ ○ Remote Extension
```
3. Select the `Computer Controller` extension
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ ○ Developer Tools
// highlight-start
│ ● Computer Controller
// highlight-end
│ ○ Memory
| ○ JetBrains
└ Enabled Computer Controller extension
```
4. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ Computer Controller
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
└ Enabled Computer Controller extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, I'll show you how Goose can multitask, handling everything from system controls and music playback to web research and data organization.
:::info LLM
Anthropic's Claude 3.5 Sonnet was used for this task.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Goose Prompt
```
Goose, I need to decompress while researching AI models for tomorrow's meeting. Can you create a relaxing environment and help me research?
1. Play classical music in Safari
2. Dim screen brightness (2 levels)
3. Research current flagship AI models (Anthropic, OpenAI, Google):
* Verify availability
* Collect: release date, features, pricing, context window
* Use official sources only
4. Create "ai-models-comparison.csv" on desktop with collected data
5. Launch Numbers and open the CSV file
6. Reset brightness and close Safari
```
### Goose Output
```md
I'll help you create a relaxing research environment and gather information about AI models. I'll break this down into steps:
1. First, let's set up the relaxing environment with classical music and dimmed screen:
─── computer_control | computercontroller ──────────────────────────
script: ...
2. Now, let's research the AI models. I'll use web search and scraping to gather
information from official sources:
─── web_search | computercontroller ──────────────────────────
query: Claude
─── web_search | computercontroller ──────────────────────────
query: GPT4
─── web_search | computercontroller ──────────────────────────
query: Gemini
3. Let's create the CSV file with the collected information:
─── automation_script | computercontroller ──────────────────────────
language: shell
script: ...
4. Now, let's open the CSV file in Numbers and reset the environment:
─── computer_control | computercontroller ──────────────────────────
script: ...
I've completed all the requested tasks:
1. ✅ Played classical music in Safari
2. ✅ Dimmed screen brightness
3. ✅ Researched current flagship AI models
4. ✅ Created the CSV file on desktop
5. ✅ Launched Numbers and opened the CSV file
6. ✅ Reset brightness and closed Safari
The CSV file has been created on your desktop with the following information for each model:
- Model name
- Company
- Release date
- Key features
- Context window size
- Pricing information
The file is now open in Numbers for your review. The environment has been reset to normal settings. Is there anything specific about any of the models you'd like me to elaborate on?
```
### Results
![Computer Controller MCP Output](../assets/guides/computer-controller-csv-result.png)

View File

@@ -1,170 +0,0 @@
---
title: Context7 Extension
escription: Add Context7 MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/LNmPi6YCocI" />
This tutorial covers how to add the [Context7 MCP Server](https://github.com/upstash/context7) as a Goose extension to pull up-to-date, version-specific code and docs so Goose can vibe code with real context, not hallucinated or outdated answers.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40upstash%2Fcontext7-mcp&id=context7&name=Context7&description=Context7%20MCP%20server%20for%20up-to-date%20code%20and%20docs)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @upstash/context7-mcp
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40upstash%2Fcontext7-mcp&id=context7&name=Context7&description=Context7%20MCP%20server%20for%20up-to-date%20code%20and%20docs)
2. Press <code>Yes</code> to confirm the installation
3. Click <code>Save Configuration</code>
4. Scroll to the top and click <code>Exit</code> from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
<CLIExtensionInstructions
name="context7"
command="npx -y @upstash/context7-mcp"
timeout={300}
/>
</TabItem>
</Tabs>
## Example Usage
In this example, Goose uses Context7 to pull real-time docs, compare tools, and scaffold a modern app using only the latest, official implementation patterns.
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Goose Prompt
I need help building a modern web application. Could you:
1. Use Context7 to analyze and compare:
- Next.js App Router vs Pages Router
- Prisma vs other ORMs
- Different authentication approaches
- State management solutions
2. For each technology chosen:
- Show the latest official implementation patterns
- Provide type definitions and interfaces
- Share relevant code snippets from documentation
- Explain best practices and common pitfalls
3. Help implement:
- Project structure following official guidelines
- Database schema and type safety
- Authentication flow with proper security
- API routes with error handling
- Performance optimizations
Please reference specific documentation sections and explain why certain approaches are recommended over others.
### Goose Output
:::note Desktop
1. Technology Analysis
Next.js App Router vs Pages Router
First, let's get the latest Next.js documentation:
-------- Resolve-library-id -------
Let's get detailed documentation about Next.js, focusing on routing:
------ Get-library-docs ---------
Let me analyze the Next.js documentation and break down the key differences between the App Router and Pages Router:
------ code structure comparison -----
Let's get information about Prisma and other ORMs:
------- Resolve-library-id ----------
Let's get Prisma's documentation:
------ Get-library-docs ----------
Key Decisions and Best Practices:
1. App Router vs Pages Router:
Chose App Router for:
Server Components by default (better performance)
Built-in data fetching with streaming
Simpler API routes with Route Handlers
Better TypeScript integration
2. Prisma as ORM:
Benefits:
Type-safe database queries
Auto-generated client
Schema migrations
Rich query API
Using Prisma Accelerate for better performance
3. Authentication:
NextAuth.js for:
Built-in security features
Multiple authentication providers
Session management
JWT handling
4. Performance Optimizations:
Server Components for reduced JavaScript
Route Handlers for API endpoints
Prisma Accelerate for database performance
Type safety across the stack
Would you like me to explain any part in more detail or help you implement specific features?
:::

View File

@@ -1,6 +1,5 @@
---
title: Building Custom Extensions
sidebar_position: 1
description: Create your own custom MCP Server to use as a Goose extension
---

View File

@@ -1,156 +0,0 @@
---
title: Developer Extension
description: Use Developer MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/on_p-LeIrak" />
The Developer extension allows Goose to automate developer-centric tasks such as file editing, shell command execution, and project setup.
This tutorial will cover enabling and using the Developer MCP Server, which is a built-in Goose extension.
## Configuration
:::info
The Developer extension is already enabled by default when Goose is installed.
:::
1. Ensure extension is enabled:
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the upper right corner
2. Click `Advanced Settings`
3. Under `Extensions`, toggle `Developer` to on.
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to `Toggle Extensions`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Toggle Extensions
◆ Enable extensions: (use "space" to toggle and "enter" to submit)
// highlight-start
│ ● developer
// highlight-end
└ Extension settings updated successfully
```
</TabItem>
</Tabs>
## Example Usage
In this example, I'm going to have Goose automate setting up my JavaScript developer environment with Express, Mongoose, Nodemon, Dotenv and initialize Git.
:::info LLM
Anthropic's Claude 3.5 Sonnet was used for this task.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Goose Prompt
```
set up a new JavaScript project with Express, Mongoose, Nodemon, and Dotenv? Fetch the latest package versions, generate a README with those versions, and initialize Git
```
After 1 minute, Goose was done setting up my entire dev environment! 🎉
### Goose Output
```md
I'll help you set up a new JavaScript project with those dependencies. I'll break this down into steps:
1. First, let's create a new directory and initialize the project
2. Then install the dependencies
3. Create a detailed README
4. Initialize git
5. Create some starter files
6. Let's begin:
[... shell commands, files created ...]
Great! I've set up a complete Express project with MongoDB and Dotenv integrations:
1. Created a new project directory and initialized npm
2. Installed Express, Mongoose, and dotenv dependencies
3. set up the basic project structure with directories for:
- config/
- models/
- routes/
- controllers/
4. Created essential files:
- index.js (main server file)
- .env (environment variables)
- .ignore (with common node.js ignores)
5. Added a basic user model with basic name and email fields
6. Created a user controller with two methods:
- getUsers (GET all users)
- createUser (POST new user)
7. Added user routes under `/api/routes`
8. Updated package.json with start scripts
9. Created a comprehensive README.md with:
- Installation scripts
- Project structure
- Available scripts
- Environment variables
- Latest package versions
The project structure is:
my-express-app/
├── config/ # Configuration files
├── models/ # MongoDB models
│ └── User.js # User model
├── routes/ # API routes
│ └── userRoutes.js
├── controllers/ # Route controllers
│ └── userController.js
├── .env # Environment variables
├── .gitignore # Git ignore file
├── index.js # Entry point
└── package.json # Project dependencies and scripts
To start developing you can:
1. Run `npm install` to install dependencies
2. start the server with `npm run dev`
The API will be available at:
- `http://localhost:3000/api/users` (GET to get all users)
- `http://localhost:3000/api/users` (POST to create a new user)
To test out the API you can use tools like postman or curl, for example, to create a new user:
curl x POST http://localhost:3000/api/users \
-H "Content-Type: application/json" \
-d '{"name": "Ebony Louis" , "email": "ebony@example.com"}'
Would you like me to add any additional features or make other improvements to the setup?
```

View File

@@ -1,255 +0,0 @@
---
title: ElevenLabs Extension
description: Add ElevenLabs MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/1Z8XtjQ9El0" />
This tutorial covers how to add the [ElevenLabs MCP Server](https://github.com/yamadashy/repomix) as a Goose extension to enable AI-powered voice generation, voice cloning, audio editing, and speech-to-text transcription.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&arg=elevenlabs-mcp&id=elevenlabs&name=ElevenLabs&description=ElevenLabs%20voice%20synthesis%20server&env=ELEVENLABS_API_KEY)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx elevenlabs-mcp
```
</TabItem>
</Tabs>
**Environment Variable**
```
ELEVENLABS_API_KEY: <YOUR_API_KEY>
```
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&arg=elevenlabs-mcp&id=elevenlabs&name=ElevenLabs&description=ElevenLabs%20voice%20synthesis%20server&env=ELEVENLABS_API_KEY)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ elevenlabs
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ elevenlabs
// highlight-start
◆ What command should be run?
│ uvx elevenlabs-mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ elevenlabs
◇ What command should be run?
│ uvx elevenlabs-mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ elevenlabs
◇ What command should be run?
│ uvx elevenlabs-mcp
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain an [ElevenLabs API Key](https://elevenlabs.io/app/settings/api-keys) and paste it in.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ elevenlabs
◇ What command should be run?
│ uvx elevenlabs-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
|
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ ELEVENLABS_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added elevenlabs extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, Ill show you how to use Goose with the ElevenLabs Extension to create AI-generated voiceovers for a YouTube Short. Goose will take a sample script I provided, generate a narrated version using different AI voices, and seamlessly switch tones mid-script to match the content flow.
By connecting to the ElevenLabs MCP server, Goose can transform plain text into natural-sounding speech, offering multiple voice styles and character options — all without any manual recording or editing.
### Goose Prompt
> Hey Goose, create a script for me for my youtube short video, I want there to be two different voices. The first voice should cut me off and be a human narrator style and then switch to a cassual AI tone after I read the prompt. Here's an example of a YT short script I've done in the past:
Wait… Within Seconds, Goose performed Security Audits Across Multiple Projects?! 🔥
Lets, plug & play to find out how
Lets provide Goose with the command it needs to connect to the Filesystem MCP server extension…
Now lets play
propmt: "Hey Goose, I need to perform a security audit across multiple projects. Let's check for…🔹 Hardcoded Credentials API keys, passwords, and secrets left in the code.🔹 SQL Injection Risks Unsafe queries that could expose data.🔹 Insecure Cryptographic Practices Weak encryption methods that put data at risk.AND🔹 Exposed Config Files Sensitive information that shouldn't be public.🔹 Outdated Dependencies Security vulnerabilities in third-party libraries."
Go Goose, go Goose!
✅ Goose scanned the entire codebase across 3 different projects, identified security risks, generated a detailed report with fixes and provided me with step by step instructions on how I can test and verify these code fixes!
If thats not amazing idk what is …
🚀 to get started visit block.github.io/goose_
### Goose Output
:::note Desktop
I'll create your YouTube script for you using the given script as reference.
───────────── Text To Speech ─────────────
───────────── Text To Speech ─────────────
───────────── Text To Speech ─────────────
───────────── Text To Speech ─────────────
───────────── Text To Speech ─────────────
───────────── Play Audio ────────────────
───────────── Play Audio ────────────────
The script has been created and read aloud using the specified voices and style. The audio files have been saved to your desktop.
Press play and hear it for yourself! 🔊
<audio controls>
<source src="/goose/audio/elevenlabs-mcp-demo.mp3" type="audio/mpeg" />
Your browser does not support the audio element.
</audio>
:::

View File

@@ -1,378 +0,0 @@
---
title: Fetch Extension
description: Add Fetch MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/_WMm4kDYMog" />
:::warning Known Limitation
The Fetch extension [does not work](https://github.com/block/goose/issues/1184) with Google models (e.g. gemini-2.0-flash) because this extension uses `format: uri` in its JSON schema which Google doesn't support.
:::
This tutorial covers how to add the [Fetch MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/fetch) as a Goose extension to retrieve and process content from the web.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&arg=mcp-server-fetch&id=fetch&name=Fetch&description=Web%20content%20fetching%20and%20processing%20capabilities)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx mcp-server-fetch
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&arg=mcp-server-fetch&id=fetch&name=Fetch&description=Web%20content%20fetching%20and%20processing%20capabilities)
2. Press `Yes` to confirm the installation
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ fetch
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ fetch
// highlight-start
◆ What command should be run?
│ uvx mcp-server-fetch
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ fetch
◇ What command should be run?
│ uvx mcp-server-fetch
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ fetch
◇ What command should be run?
│ uvx mcp-server-fetch
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ fetch
◇ What command should be run?
│ uvx mcp-server-fetch
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◇ Would you like to add environment variables?
│ No
// highlight-end
└ Added fetch extension
```
</TabItem>
</Tabs>
## Example Usage
Let's use the Fetch extension to get random programming jokes from the [Official Joke API](https://official-joke-api.appspot.com/random_joke).
:::info
While this API does not require an API key, many APIs do. If you need to provide an API key, you can set it as an environment variable and tell Goose its name. Example: _"get tomorrow's weather for New Orleans from the weatherapi. Don't use the key directly but instead use a script that gets the value from the env var WEATHER_API_KEY"_
:::
### Goose Prompt
```
make a web page that tells jokes for programmers. The page should ask the user the setup of the joke, allow them to guess the punchline and then tell them if they are right or wrong. Include a button that allows them to request another joke. you can fetch the jokes from the official joke api
```
### Goose Output
```
I'll help you create a web page that uses the Official Joke API to display programming jokes. I'll break this down into steps:
First, let's verify the API endpoint and see what kind of data we get
Then create an HTML file with the necessary structure
Add JavaScript to handle the interactions
Let me check the API first:
FETCH
url: https://official-joke-api.appspot.com/jokes/programming/random
Output
Content type application/json; charset=utf-8 cannot be simplified to markdown, but here is the raw content:
Contents of https://official-joke-api.appspot.com/jokes/programming/random:
[{"type":"programming","setup":"A SQL query walks into a bar, walks up to two tables and asks...","punchline":"'Can I join you?'","id":23}]
Perfect! Now I'll create an HTML file with the necessary structure and JavaScript code:
TEXT_EDITOR
command: write
file_text:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="U...
path:
programmer_jokes.html
Output
programmer_jokes.html
[... contents of programmer_jokes.html ...]
I've created a complete web page that:
Fetches random programming jokes from the Official Joke API
Shows the setup of the joke
Provides an input field for users to guess the punchline
Shows whether they got it right or wrong
Displays the actual punchline after they guess
Includes a button to get another joke
The page also includes:
Clean, modern styling
Error handling for API failures
Responsive design that works on both desktop and mobile
Visual feedback for correct/incorrect answers
Disabled input after guessing to prevent multiple attempts
You can open the file programmer_jokes.html in your web browser to try it out. Would you like me to help you test it or make any adjustments to the design or functionality?
```
### Results
![website goose built](../assets/guides/programmer-jokes-fetch-mcp.png)
<details>
<summary>Source Code</summary>
```html title="programmer_jokes.html"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Programmer Jokes</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
text-align: center;
}
.container {
background-color: #f5f5f5;
padding: 20px;
border-radius: 10px;
margin-top: 20px;
}
.setup {
font-size: 1.2em;
margin-bottom: 20px;
}
.guess-container {
margin-bottom: 20px;
}
#guessInput {
padding: 10px;
width: 300px;
margin-right: 10px;
}
button {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
.result {
margin-top: 20px;
font-weight: bold;
}
.correct {
color: green;
}
.incorrect {
color: red;
}
#punchline {
display: none;
margin-top: 20px;
font-style: italic;
}
</style>
</head>
<body>
<h1>Programmer Jokes</h1>
<div class="container">
<div id="setup" class="setup">Loading joke...</div>
<div class="guess-container">
<input type="text" id="guessInput" placeholder="Guess the punchline...">
<button onclick="checkGuess()">Submit Guess</button>
</div>
<div id="result" class="result"></div>
<div id="punchline"></div>
<button onclick="getNewJoke()" style="margin-top: 20px;">Get Another Joke</button>
</div>
<script>
let currentJoke = null;
async function getNewJoke() {
try {
const response = await fetch('https://official-joke-api.appspot.com/jokes/programming/random');
const jokes = await response.json();
currentJoke = jokes[0];
document.getElementById('setup').textContent = currentJoke.setup;
document.getElementById('guessInput').value = '';
document.getElementById('result').textContent = '';
document.getElementById('punchline').style.display = 'none';
document.getElementById('guessInput').disabled = false;
} catch (error) {
document.getElementById('setup').textContent = 'Error loading joke. Please try again.';
}
}
function checkGuess() {
const guess = document.getElementById('guessInput').value.trim().toLowerCase();
const punchline = currentJoke.punchline.toLowerCase();
const resultElement = document.getElementById('result');
const punchlineElement = document.getElementById('punchline');
if (guess === punchline) {
resultElement.textContent = 'Correct! You got it! 🎉';
resultElement.className = 'result correct';
} else {
resultElement.textContent = 'Not quite! Here\'s the punchline:';
resultElement.className = 'result incorrect';
}
punchlineElement.textContent = currentJoke.punchline;
punchlineElement.style.display = 'block';
document.getElementById('guessInput').disabled = true;
}
// Load first joke when page loads
getNewJoke();
</script>
</body>
</html>
```
</details>

View File

@@ -1,337 +0,0 @@
---
title: Figma Extension
description: Add Figma MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/vHK9Xg_d6Sk" />
This tutorial covers how to add the [Figma MCP Server](https://github.com/hapins/figma-mcp) as a Goose extension to enable interaction with Figma files, designs, and components.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40hapins%2Ffigma-mcp&id=figma&name=Figma&description=Figma%20design%20tool%20integration&env=FIGMA_ACCESS_TOKEN%3DAccess%20token%20from%20Figma%20user%20settings)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @hapins/figma-mcp
```
</TabItem>
</Tabs>
**Environment Variable**
```
FIGMA_ACCESS_TOKEN: <YOUR_TOKEN>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40hapins%2Ffigma-mcp&id=figma&name=Figma&description=Figma%20design%20tool%20integration&env=FIGMA_ACCESS_TOKEN%3DAccess%20token%20from%20Figma%20user%20settings)
2. Press `Yes` to confirm the installation
3. Obtain a [Figma Access Token](https://www.figma.com/developers/api#access-tokens) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ figma
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ figma
// highlight-start
◆ What command should be run?
│ npx -y @hapins/figma-mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ figma
◇ What command should be run?
│ npx -y @hapins/figma-mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ figma
◇ What command should be run?
│ npx -y @hapins/figma-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain a [Figma Access Token](https://www.figma.com/developers/api#access-tokens) and paste it in.
:::info
You can generate an access token from your Figma account settings under the Personal access tokens section.
:::
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ figma
◇ What command should be run?
│ npx -y @hapins/figma-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ FIGMA_ACCESS_TOKEN
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added figma extension
```
</TabItem>
</Tabs>
## Example Usage
The Figma MCP server allows you to interact with your Figma files and designs programmatically. When creating your access token, make sure you give it the appropriate access and scope:
1. Read access for files
2. Write access for Comments
3. And any other scopes of your choice.
Given this [Community Figma design](https://www.figma.com/community/file/1037030891378807455), we'll have Goose build a webpage.
![Figma Design](../assets/guides/figma-mcp-design.png)
:::tip
Get the Figma File ID from the URL. For example, `https://www.figma.com/file/KvR8Wpe6ITaCD3et3H7l6k/AI-Landing-Page` has a file ID of `KvR8Wpe6ITaCD3et3H7l6k`.
:::
### Goose Prompt
```
( O)> Convert my figma design with file ID 7r0mLHWx2rrjwn79mcNVNE into a webpage. Get specific detailed information and styling about each element and components within each frame. Make sure to implement any interactions or animations and use a placeholder div with a gray background for images.
Some elements are centralized, some are duplicated, make sure to get them correct. And ensure correct alignment and spacing between elements.
```
### Goose Output
```
I'll help you convert your Figma design into a webpage. Let's break this down into steps and
gather all the necessary information from your Figma file.
1. First, let's get the file information to understand the overall structure:
─── get_file_info | figma ──────────────────────────
depth: 4
file_key: 7r0mLHWx2rrjwn79mcNVNE
Let me help you convert this Figma design into a webpage. I'll create the HTML and CSS based
on the design specifications from the Figma file. I'll break it down into sections and impl
ement all the styling and interactions.
Let's create the files:
─── text_editor | developer ──────────────────────────
path: ~/D/w/l/m/figma-example/index.html
command: write
file_text: ...
### .../figma-example/index.html
--- HTML content hidden ---
Now, let's create the CSS file with all the styling:
─── text_editor | developer ──────────────────────────
path: ~/D/w/l/m/figma-example/styles.css
command: write
file_text: ...
### .../figma-example/styles.css
--- CSS content hidden ---
I've created a complete implementation of the Figma design with the following features and c
onsiderations:
1. **Typography**:
- Used the exact fonts from the design: Poppins, Overpass, Nunito Sans, Public Sans, and Ral
eway
- Implemented correct font weights, sizes, and letter spacing
- Maintained the text hierarchy as shown in the design
2. **Colors**:
- Used the exact color codes from the Figma file
- Implemented the proper background colors (#250b71 for header and footer)
- Used correct text colors for different sections
3. **Layout**:
- Created a responsive layout that matches the design
- Implemented proper spacing and alignment
- Used CSS Grid for the book cards
- Used Flexbox for navigation and content alignment
4. **Components**:
- Navigation bar with social media links
- About Me section with placeholder for image
- Education section with ordered list
- Book cards with proper styling
- Mood section with image placeholders
- Footer with copyright text
5. **Interactive Elements**:
- Hover effects on navigation links
- "Next Section" buttons with icons
- "Go on Top" button at the bottom
6. **Responsive Design**:
- Added media queries for different screen sizes
- Responsive adjustments for mobile and tablet views
- Flexible layouts that adapt to different screen sizes
7. **Images**:
- Used placeholder divs with background colors for images
- Maintained aspect ratios from the original design
8. **Accessibility**:
- Semantic HTML structure
- Proper heading hierarchy
- Alt text placeholders for images
- Readable text contrast
To use this implementation:
1. Make sure all the fonts are properly loaded (they're being loaded from Google Fonts)
2. Replace the image placeholders with actual images
3. Add proper links to the social media navigation
4. Add any additional interactive features or animations as needed
The implementation maintains the visual hierarchy and styling of the original Figma design while
ensuring it's responsive and accessible. You can further customize the colors, spacing,
and other properties by modifying the CSS variables if needed.
Would you like me to add any specific interactions or make any adjustments to the implementation?
```
### Result
The Figma design has been successfully converted into a webpage with the styling, content and components from the original design.
![Figma MCP Output](../assets/guides/figma-mcp-output.png)
:::tip
In cases where you need to make additional changes, or the final output is not as expected - you can continue to interact with Goose to make adjustments.
:::

View File

@@ -1,463 +0,0 @@
---
title: Filesystem Extension
description: Add Filesystem MCP Server as Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://youtube.com/embed/2IVPcjEr-yQ" />
This tutorial covers how to add the [Filesystem MCP server](https://github.com/modelcontextprotocol/servers/tree/HEAD/src/filesystem) as a Goose extension, enabling powerful code analysis and file management. With this extension, Goose can analyze project structures, edit and organize files, detect unused dependencies, and generate documentation to improve software maintainability.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@modelcontextprotocol/server-filesystem&arg=/path/to/allowed/directory&id=filesystem-mcp&name=Filesystem%20MCP%20Server&description=Filesystem%20MCP%20Server)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-filesystem </path/to/allowed/directory>
```
</TabItem>
</Tabs>
You can specify multiple allowed directories by separating them with a space.
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this commands, as is uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@modelcontextprotocol/server-filesystem&arg=/path/to/allowed/directory&id=filesystem-mcp&name=Filesystem%20MCP%20Server&description=Filesystem%20MCP%20Server)
2. Press `Yes` to confirm the installation
3. Add additional allowed directories if desired, separated by a space.
4. Click `Save Configuration`
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ filesystem
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ filesystem
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/directory
// highlight-end
```
:::tip Multiple Directories
You can specify multiple allowed directories by separating them with a space.
:::
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ filesystem
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/directory
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ filesystem
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/directory
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◆ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ filesystem
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/directory
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added filesystem extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, I'll use Goose to perform a comprehensive security audit across multiple projects, including a payment processing system, authentication service, and e-commerce dashboard. I need to identify security vulnerabilities, implement fixes, and ensure sensitive data and operations are properly protected.
### Goose Prompt
```
Hey Goose, I need to perform a security audit and implement fixes across multiple projects:
1. Please analyze these codebases for security issues:
- /Users/ebonyl/e-commerce-dashboard
- /Users/ebonyl/client-projects/payment-system
- /Users/ebonyl/internal/auth-service
2. Look for:
- Hardcoded credentials (API keys, passwords, secrets)
- Insecure cryptographic practices (weak hashing, encryption)
- SQL injection vulnerabilities
- Exposed configuration files
- Insecure session handling
- Logging of sensitive data
- Outdated dependencies in package.json
- Unsafe authentication methods
3. For each vulnerability found:
- Show me the problematic code
- Explain the security risk
- Provide a secure implementation
- Help me apply and test the fixes
4. Create a detailed security report including:
- Critical findings by project
- Risk severity levels
- Exact file locations and snippets
- Applied fixes and improvements
- Verification steps taken
Please focus particularly on the payment system and authentication service as they handle sensitive data.
```
### Goose Output
```
I'll help you conduct the security audit, starting with the payment system project since it handles sensitive financial data. Let me first check if we have access to these directories.
--- List Allowed Directories ---
Great, we have access to all the required directories. Let's start with the payment system project. First, I'll analyze its structure and files.
--- Directory Tree ---
Let's start by examining the key files for security issues. I'll first check the configuration and main payment processing files for potential vulnerabilities.
--- Read Multiple Files ---
I've identified several critical security vulnerabilities in the payment system. Let's address them one by one:
1. Hardcoded Credentials (CRITICAL)
Location: Both config/production.js and payment.js Risk: Exposed sensitive credentials in source code can lead to unauthorized access.
```
```JS
// Current (Unsafe):
const STRIPE_SECRET = 'sk_live_abcdef123456';
const AWS_KEY = 'AKIA12345EXAMPLE';
// Recommended Fix:
const STRIPE_SECRET = process.env.STRIPE_SECRET_KEY;
const AWS_KEY = process.env.AWS_ACCESS_KEY_ID;
Let's create a secure environment configuration:
```
```
Let's create a new secure version of the payment processor:
--- Write File ---
Let's also update the package.json to fix vulnerable dependencies:
--- Read File ---
Let's update the dependencies to their latest secure versions:
--- Write File ---
Security Report for Payment System
Critical Findings
1. Hardcoded Credentials (CRITICAL)
- Multiple sensitive credentials in source code
- Fixed by implementing environment variables
- Added .env.example template
2. Insecure Cryptographic Implementation (HIGH)
- Weak encryption key
- Improper key management
- Fixed with proper AES-256-GCM implementation
3. SSL/TLS Configuration (HIGH)
- Disabled SSL verification
- Fixed by enforcing TLS 1.2 and certificate validation
4. Sensitive Data Exposure (HIGH)
- Logging of sensitive card data
- Fixed by removing sensitive logging
- Implemented secure data encryption
5. Race Conditions (MEDIUM)
- Unsecured balance updates
- Fixed with proper database transactions
6. Vulnerable Dependencies (MEDIUM)
- Outdated packages with known vulnerabilities
- Updated all dependencies to latest secure versions
- Added security audit npm script
Verification Steps
1. Create a proper .env file from the template
2. Run npm install to update dependencies
3. Run npm run security-audit to verify no known vulnerabilities
4. Test the payment processing with test credentials
5. Verify SSL/TLS configuration
6. Test encryption/decryption functionality
7. Verify secure balance updates with concurrent transactions
I'll continue with the security audit of the remaining projects.
--- Directory Tree ---
Let's examine the key files for security issues. I'll start with the main application file and database configuration:
--- Read Multiple Files ---
Now, let's check the auth-service project:
--- Directory Tree ---
--- Read Multiple Files ---
Based on the security audit of all three projects, I'll provide a comprehensive security report and implement fixes for each project.
Comprehensive Security Audit Report
1. Payment System Security Fixes (Already Implemented)
✅ Removed hardcoded credentials ✅ Implemented secure cryptography ✅ Fixed SSL/TLS configuration ✅ Removed sensitive data exposure ✅ Fixed race conditions ✅ Updated vulnerable dependencies
2. E-commerce Dashboard Security Issues
Let's create secure implementations for the e-commerce dashboard. First, let's create a .env template:
--- Write File ---
Now, let's update the main application with security fixes:
--- Write File ---
Let's update the database configuration:
--- Write File ---
3. Auth Service Security Issues
Let's create secure implementations for the auth service. First, let's create a .env template:
--- Write File ---
Update the configuration:
--- Write File ---
Update the auth service with security fixes:
--- Write File ---
Update package.json with secure dependencies:
--- Write File ---
Final Security Report
Critical Findings Summary
1. Payment System
✅ Credentials moved to environment variables
✅ Secure cryptography implemented
✅ SSL/TLS properly configured
✅ Sensitive data protection added
✅ Race conditions resolved
✅ Dependencies updated
2. E-commerce Dashboard
✅ SQL injection vulnerabilities fixed
✅ Command injection risks mitigated
✅ Path traversal vulnerabilities resolved
✅ XSS protection implemented
✅ Secure session management added
✅ Rate limiting implemented
✅ CORS properly configured
✅ Error handling secured
✅ Database connection hardened
✅ Dependencies updated
3. Auth Service
✅ Weak JWT secret replaced
✅ Password requirements strengthened
✅ Secure session management implemented
✅ Rate limiting added
✅ File upload security improved
✅ Input validation added
✅ Error handling secured
✅ Audit logging implemented
✅ Dependencies updated
Verification Steps:
1. Environment Setup:
```
```bash
# For each project
cp .env.example .env
# Fill in secure values in .env files
```
```
2. Update Dependencies:
```
```bash
# In each project directory
npm install
npm audit
```
```
3. Test Security Measures:
```
```bash
# Rate limiting
curl -X POST http://localhost:3000/api/login -d '{"username":"test","password":"test"}' -H 'Content-Type: application/json'
# File upload
curl -X POST http://localhost:3000/api/upload -F 'file=@test.jpg' -H 'Authorization: Bearer YOUR_TOKEN'
# Protected routes
curl http://localhost:3000/api/protected -H 'Authorization: Bearer YOUR_TOKEN'
```
```
4. Security Headers Check:
```
```bash
curl -I http://localhost:3000
# Verify security headers are present
```
```
Recommended Additional Steps
1. Regular Security Audits:
- Schedule monthly dependency updates
- Run npm audit weekly
- Monitor security advisories
2. Monitoring:
- Implement centralized logging
- Set up alerts for suspicious activities
- Monitor rate limit triggers
3. Backup and Recovery:
- Implement automated backups
- Test recovery procedures
- Document incident response
4. Training:
- Security awareness training for developers
- Code review guidelines
- Security best practices documentation
Would you like me to help implement any additional security measures or explain any of the implemented fixes in more detail?
```

View File

@@ -1,136 +0,0 @@
---
title: GitHub Extension
description: Add GitHub MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/TbmQDv3SQOE" />
This tutorial covers how to add the [GitHub MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/github) as a Goose extension to enable file operations, repository management, search functionality, and more.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-github&id=github&name=GitHub&description=GitHub%20API&env=GITHUB_PERSONAL_ACCESS_TOKEN%3DGitHub%20Personal%20Access%20Token)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-github
```
</TabItem>
</Tabs>
**Environment Variable**
```
GITHUB_PERSONAL_ACCESS_TOKEN: <YOUR_TOKEN>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-github&id=github&name=GitHub&description=GitHub%20API&env=GITHUB_PERSONAL_ACCESS_TOKEN%3DGitHub%20Personal%20Access%20Token)
2. Press `Yes` to confirm the installation
3. Obtain a [GitHub Personal Access Token](https://github.com/settings/personal-access-tokens) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
<CLIExtensionInstructions
name="github"
command="npx -y @modelcontextprotocol/server-github"
timeout={300}
envVars={[
{ key: "GITHUB_TOKEN", value: "••••••••••••••••" }
]}
infoNote={
<>
When creating your access token, you can specify the repositories and granular permissions you'd like Goose to have access to.{" "}
<a
href="https://github.com/settings/personal-access-tokens"
target="_blank"
rel="noopener noreferrer"
>
Create one here
</a>.
</>
}
/>
</TabItem>
</Tabs>
## Example Usage
When creating my [GitHub Personal Access Token](https://github.com/settings/personal-access-tokens), I gave it the following access:
* Repository: [goose-demo](https://github.com/angiejones/goose-demo)
* Read access to metadata
* Read and Write access to code, commit status, issues, and pull requests
### Goose Prompt
```
create a new branch called hello-world in my angiejones/goose-demo repository. Update the README.md file to say "this was written by goose" and commit it. Open a pull request with your changes.
```
### Goose Output
```
I'll help you create a new branch, update the README, and open a pull request. Let me break this down into steps:
1. First, let's create the new branch called "hello-world" in your repository
2. Then update the README.md file
3. Finally, create a pull request
Let me execute these steps:
1. Creating the new branch:
─── create_branch | github ──────────────────────────
branch: hello-world
owner: angiejones
repo: goose-demo
2. Now, updating the README.md file in the new branch:
─── create_or_update_file | github ──────────────────────────
branch: hello-world
content: this was written by goose
message: Update README.md with Goose message
owner: angiejones
path: README.md
repo: goose-demo
3. Finally, creating the pull request:
─── create_pull_request | github ──────────────────────────
base: main
body: ...
head: hello-world
owner: angiejones
repo: goose-demo
title: Update README.md
Great! I've completed all the requested tasks:
1. Created a new branch called "hello-world"
2. Updated the README.md file with the text "this was written by goose"
3. Created a pull request to merge these changes into the main branch
You can view the pull request at: https://github.com/angiejones/goose-demo/pull/1
The pull request is now ready for your review. Would you like me to do anything else with it?
```

View File

@@ -1,342 +0,0 @@
---
title: Google Drive Extension
description: Add Google Drive MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/p9HGYbJk9wU" />
This tutorial covers how to add the [Google Drive MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/gdrive) as a Goose extension, allowing you to list, read, and search files in Google Drive.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-gdrive&id=google-drive&name=Google%20Drive&description=Google%20Drive%20integration&env=GDRIVE_CREDENTIALS_PATH%3DPath%20to%20Google%20Drive%20credentials&env=GDRIVE_OAUTH_PATH%3DPath%20to%20OAuth%20token)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
GDRIVE_OAUTH_PATH=$USER_HOME/.config/gcp-oauth.keys.json \
GDRIVE_CREDENTIALS_PATH=$USER_HOME/.config/.gdrive-server-credentials.json \
npx -y @modelcontextprotocol/server-gdrive auth \
npx -y @modelcontextprotocol/server-gdrive
```
</TabItem>
</Tabs>
**Environment Variable**
```
GDRIVE_CREDENTIALS_PATH: $USER_HOME/.config/.gdrive-server-credentials.json
GDRIVE_OAUTH_PATH: $USER_HOME/.config/gcp-oauth.keys.json
```
:::
:::info
Note that you *must* use absolute paths in the environment variables. Make sure you replace `$USER_HOME` with your home directory.
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
To obtain your Google Drive server credentials and oauth keys, follow the steps below:
1. Set up your Google Cloud Credentials, to enable API access:
- Create Google Cloud Project
- Go to [Google Cloud Console](https://console.cloud.google.com/projectcreate) and create a new project
- You can leave `location` as `No organization`
- Enable Google Drive API
- In your project, go to the [API Product Library`](https://console.cloud.google.com/workspace-api/products)
- Confirm you're in the right project by checking the top left corner
- Search `Google Drive API` and enable it
2. Configure OAuth Consent Screen
- Go to the [OAuth Consent Screen](https://console.cloud.google.com/auth/overview/create)
- Enter required information, `project name` , `user support email`
- Choose `Internal` for `Audience` and press `create`
- If you are unable to choose `Internal` select `External` and follow these additional steps:
- Navigate to the [Audience](https://console.cloud.google.com/auth/audience) screen
- Under `Test users` click `Add Users`
3. Create OAuth Credential
- Go to [OAuth Clients](https://console.cloud.google.com/apis/credentials/oauthclient)
- Click `Create Client`
- Choose **Application Type: Desktop App**
- Download the JSON key file
- Rename it to `gcp-oauth.keys.json`
- Move it to a secure location where the extension can access it:
```sh
mv ~/Downloads/gcp-oauth.keys.json ~/.config/gcp-oauth.keys.json
```
4. Connect Google Account
To connect your Google account, run the following authentication command in your terminal:
```sh
GDRIVE_OAUTH_PATH=$USER_HOME/.config/gcp-oauth.keys.json \
GDRIVE_CREDENTIALS_PATH=$USER_HOME/.config/.gdrive-server-credentials.json \
npx -y @modelcontextprotocol/server-gdrive auth
```
:::info
Replace `$USER_HOME` with your home directory.
:::
A browser window will open for authentication. Follow the prompts to connect your Google account and complete the OAuth process. At this stage, your environment variable `GDRIVE_CREDENTIALS_PATH` will be set with the saved credentials.
:::tip
You'll need to re-authenticate once a day when using the Google Drive extension. To re-authenticate, simply re-run the authentication command in your terminal.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-gdrive&id=google-drive&name=Google%20Drive&description=Google%20Drive%20integration&env=GDRIVE_CREDENTIALS_PATH%3DPath%20to%20Google%20Drive%20credentials&env=GDRIVE_OAUTH_PATH%3DPath%20to%20OAuth%20token)
2. Press `Yes` to confirm the installation
3. For `GDRIVE_CREDENTIALS_PATH`, enter the following:
```sh
$USER_HOME/.config/.gdrive-server-credentials.json
```
:::info
Replace `$USER_HOME` with your home directory. You must specify an absolute path for this extension to work.
:::
4. For `GDRIVE_OAUTH_PATH`, enter the following:
```sh
$USER_HOME/.config/gcp-oauth.keys.json
```
:::info
Replace `$USER_HOME` with your home directory. You must specify an absolute path for this extension to work.
:::
5. Click `Save Configuration`
6. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ google drive
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ google drive
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-gdrive
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ google drive
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-gdrive
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ google drive
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-gdrive
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Add your environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ google drive
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-gdrive
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ GDRIVE_CREDENTIALS_PATH
◇ Environment variable value:
│ ~/.config/.gdrive-server-credentials.json
◇ Add another environment variable?
│ yes
|
◇ Environment variable name:
│ GDRIVE_OAUTH_PATH
◇ Environment variable value:
│ ~/.config/gcp-oauth.keys.json
// highlight-end
└ Added google drive extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, Ill use Goose to quickly gather and summarize important information for my upcoming marketing budget review meeting in 30 minutes. Ill ask Goose to find relevant documents from my Google Drive, summarize Q1 performance, highlight critical decisions on marketing automation and video production, and identify any outstanding action items from our last meeting.
### Goose Prompt
```
I have an important marketing budget review meeting in 30 minutes and I need your help getting prepared. I have several documents in my Google Drive from our previous meetings and planning sessions. Could you help me by:
1. Finding all relevant documents about our marketing budget and performance
2. Giving me a quick summary of our Q1 performance
3. Highlighting the key decisions we need to make about the marketing automation tool and video production
4. Identifying any outstanding action items from our last meeting
I need a quick but comprehensive overview so I can walk into this meeting well-prepared.
```
### Goose Output
```
I'll help you prepare for your meeting. Let me first list available resources from Google Drive to make sure we access the correct files.
[... list resources ...]
Great! I can see several relevant documents. Let me access them one by one to gather the information you need.
[... reads resources ...]
Based on all these documents, here's your comprehensive overview for the meeting:
Q1 Performance Summary:
- Overall 5% under budget ($104,200 spent vs $107,000 budgeted)
- Digital Marketing performing well with highest ROI:
- Email marketing: 3.2 ROI
- Google Ads: 2.4 ROI
- Content Marketing: 2.1 ROI
- Social media engagement up 23% from previous quarter
- Content marketing blog posts generating 2x expected leads
Key Decisions Needed:
1. Marketing Automation Tool (License Renewal Due):
- Current tool (BasicAutomation Pro): $12,000/year
- Options:
- GrowthStack ($15,000/year) - recommended option, balanced features/price
- MarketingHub Enterprise ($18,000/year) - premium option with AI features
- Decision needed on whether to upgrade or maintain current solution
- Implementation would take 6 weeks if changing providers
2. Video Production Investment:
- Three vendor options:
- CreativeForce Media ($16,200) - most comprehensive, unlimited revisions
- VisualCraft Studios ($14,500) - solid middle option
- Digital Narrative Pro ($12,800) - basic package
- CreativeForce Media is recommended despite higher cost due to comprehensive deliverables
- Timeline ranges from 3-5 weeks depending on vendor choice
Outstanding Action Items from Last Meeting:
1. Sarah needs to present ROI analysis for video content investment
2. John needs to complete software license review
3. Lisa to present new PPC strategy
4. Mike has completed the video production agency quotes
Q2 Planning Considerations:
- Proposed 12% budget increase for Q2 ($120,000 total)
- Potential reallocation needed based on new tool and video production decisions
- PPC strategy review pending
Would you like me to focus on any particular aspect of this overview in more detail?
```

View File

@@ -1,320 +0,0 @@
---
title: Google Maps Extension
description: Add Google Maps MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
This tutorial covers how to add the [Google Maps MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/google-maps) as a Goose extension to enable geocoding, place searching, distance calculations, elevation data retrieval, and directions.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-google-maps&id=google-maps&name=Google%20Maps&description=Google%20Maps%20API%20integration&env=GOOGLE_MAPS_API_KEY%3DGoogle%20Maps%20API%20key)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-google-maps
```
</TabItem>
</Tabs>
**Environment Variable**
```
GOOGLE_MAPS_API_KEY: <YOUR_TOKEN>
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface" defaultValue="ui">
<TabItem value="ui" label="Goose Desktop">
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-google-maps&id=google-maps&name=Google%20Maps&description=Google%20Maps%20API%20integration&env=GOOGLE_MAPS_API_KEY%3DGoogle%20Maps%20API%20key)
2. Press `Yes` to confirm the installation
3. Obtain a [GOOGLE_MAPS_API_KEY](https://developers.google.com/maps/documentation/javascript/get-api-key) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ Google Maps
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Google Maps
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-google-maps
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Google Maps
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-google-maps
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Google Maps
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-google-maps
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain a [Google Maps API Key](https://developers.google.com/maps/documentation/javascript/get-api-key) and paste it in.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Google Maps
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-google-maps
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ GOOGLE_MAPS_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added github extension
```
</TabItem>
</Tabs>
## Example Usage
Goose acts as an autonomous agent that tracks a delivery drivers location, updates the customer in real-time, and adjusts ETAs dynamically based on Google Maps traffic data.
Goose can:
**Monitor Driver Location**
* Goose gets the drivers GPS coordinates every few seconds.
* If the drivers location is significantly behind schedule, Goose recalculates the ETA.
**Traffic-Aware ETA Adjustments**
* Goose queries Google Maps for live traffic conditions.
* If delays are detected, Goose updates the customers tracker with a new estimated time.
**Dynamic Customer Notifications**
* If the driver is stuck in traffic, Goose sends an alert to the customer: “Your driver is running late due to traffic. Updated ETA: 7:25 PM.”
* If the driver is ahead of schedule, Goose notifies the restaurant to prepare the food earlier.
### Goose Prompt
```
Track the live GPS location of driver ID #12345. Query Google Maps for real-time traffic data and adjust the estimated delivery time if delays exceed 5 minutes. If ETA changes, update the customers live tracker and send an SMS notification. If the delay is greater than 20 minutes, check if another driver within a 1-mile radius can take over the delivery.
```
### Goose Output
:::note CLI
Okay, I will track Driver #12345, query Google Maps for traffic data, adjust the ETA, and notify the customer.
**Track Driver's GPS Location**
* **Driver ID:** #12345
* **Starting Point:** 1955 Broadway, Suite 600, Oakland, CA 94612
Driver #12345's movement:
```
2025-02-23 08:20:00: Latitude: 37.8074, Longitude: -122.2697 (Starting point)
2025-02-23 08:21:00: Latitude: 37.8080, Longitude: -122.2690
2025-02-23 08:22:00: Latitude: 37.8090, Longitude: -122.2680
2025-02-23 08:23:00: Latitude: 37.8100, Longitude: -122.2670
```
**Geocode Destination Address**
* **Customer Address:** 2111 Mission Street, San Francisco, CA
I will convert this address into geographic coordinates:
`─── maps_geocode | googlemaps ──────────────────────────`
address: 2111 Mission Street, San Francisco, CA
```
Latitude: 37.7631446
Longitude: -122.4192073
```
**Get Initial Directions and ETA**
I will get the initial route and ETA from the driver's starting point to the customer's address.
`─── maps_directions | googlemaps ──────────────────────────`
destination: 2111 Mission St, San Francisco, CA
mode: driving
origin: ...
```
Distance: 12.1 miles
Initial ETA: 21 minutes
Estimated arrival at: 08:41 AM
```
**Monitor Traffic and Adjust ETA**
I will monitor traffic updates and recalculate the ETA periodically.
```
Remaining Distance: 8 miles
Updated ETA: 15 minutes
Estimated arrival at: 08:45 AM
```
There is no significant delay.
*At 08:35 AM:* There's a traffic incident.
`─── maps_directions | googlemaps ──────────────────────────`
destination: 2111 Mission St, San Francisco, CA
mode: driving
origin: Latitude: 37.8100, Longitude: -122.2670
I apologize, I am unable to use the lat/long for the request. I will call google maps api with names instead.
`─── maps_directions | googlemaps ──────────────────────────`
destination: 2111 Mission St, San Francisco, CA
mode: driving
origin: ...
```
Remaining Distance: 7 miles
Updated ETA: 26 minutes
Estimated arrival at: 08:46 AM
```
The ETA has increased by 5 minutes from the original ETA of 08:41 AM. The directions now include a message: "Expect delays due to congestion."
**Update Customer and Send SMS**
[... other extensions used (e.g. Webhooks, MySQL, ClickSend)...]
* **Update Live Tracker:** The customer's live tracking interface is updated to reflect the new ETA of 08:46 AM.
* **Send SMS Notification:** _"Your delivery is now expected to arrive at approximately 08:46 AM due to traffic. We apologize for the inconvenience."_
:::

View File

@@ -0,0 +1,187 @@
---
title: Isolated Development Environments
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
This guide shows you how to set up isolated development environments using the **[Container Use MCP](https://github.com/dagger/container-use)** with Goose. With this setup, your development work will be isolated to both git branches and containers, allowing you to experiment freely without affecting your main system state.
Note that the container-use MCP is very new and emerging, but offers powerful ways to do isolated development which are very agent friendly (build on tools like Docker, copy on write filesystems and more)
## Overview
The **[Container Use MCP](https://github.com/dagger/container-use)** server provides containerized development environments that integrate seamlessly with Goose. This allows you to:
- Work on changes isolated to git branches
- Run code in containers without affecting your local machine
- Easily reset and start fresh when needed
- Maintain clean separation between different projects and experiments
- Work on things in parallel
## Prerequisites
- Docker installed and running on your system
- Git installed and configured
- Goose installed and configured
## Installation
### Install Container Use
Head on over to the [Container Use README](https://github.com/dagger/container-use/blob/main/README.md) for up-to-date install instructions for this fast moving project.
## Adding to Goose
### Method 1: Quick Setup Link
Click this link to automatically add the extension to Goose:
**[Add Container-Use to Goose](goose://extension?cmd=cu&arg=stdio&id=container-use&name=container%20use&description=use%20containers%20with%20dagger%20and%20git%20for%20isolated%20environments)**
### Method 2: Manual Configuration
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the top right corner of the Goose Desktop.
2. Select `Advanced Settings` from the menu.
3. Under `Extensions`, click `Add custom extension`.
4. Fill in the details:
- **Type**: `Standard IO`
- **ID**: `container-use`
- **Name**: `Container Use`
- **Description**: `Use containers with dagger and git for isolated environments`
- **Command**: `cu`
- **Arguments**: `stdio`
5. Click `Add` button
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the configuration command:
```bash
goose configure
```
2. Select `Add Extension` from the menu.
3. Choose `Command-line Extension`.
4. Follow the prompts:
- **Extension name**: `Container Use`
- **Command**: `cu stdio`
- **Timeout**: `300` (or your preferred timeout)
- **Environment variables**: None needed
</TabItem>
<TabItem value="config" label="Config File">
Add the following configuration to your `~/.config/goose/config.yaml` file:
```yaml
extensions:
container-use:
name: container-use
type: stdio
enabled: true
cmd: cu
args:
- stdio
envs: {}
timeout: 300
```
</TabItem>
</Tabs>
## Usage
Once the extension is enabled in Goose, you can:
### Starting Isolated Development
Simply mention in your conversation with Goose that you want to work in an isolated environment:
```
"I want to experiment with adding a new feature, but I want to do it in an isolated environment so I don't affect my main codebase."
```
Goose will automatically:
1. Create a new git branch for your work
2. Set up a containerized environment
3. Ensure all changes are isolated from your host system
### Working with Experiments
```
"Let me try a completely different approach to this algorithm. Can you set up an isolated environment where I can experiment?"
```
### Learning New Technologies
```
"I want to try out this new framework, but I don't want to install all its dependencies on my main system."
```
## Benefits
- **Safety**: Experiment without fear of breaking your main development environment
- **Reproducibility**: Consistent environments across different machines and team members
- **Isolation**: Multiple projects can run simultaneously without conflicts
- **Easy cleanup**: Remove containers and branches when done
- **Version control**: All changes are tracked in isolated git branches
- **Rollback capability**: Easily discard failed experiments
## Common Workflows
### Feature Development
1. Start a conversation with Goose about a new feature
2. Request isolated development environment
3. Goose creates branch and container
4. Develop and test the feature
5. If successful, merge the branch; if not, discard it
### Dependency Exploration
1. Ask Goose to explore a new library or tool
2. Work in isolated container with the dependency
3. Test compatibility and functionality
4. Decide whether to integrate into main project
### Refactoring
1. Request isolated environment for major refactoring
2. Make changes in safety of container and branch
3. Test thoroughly before merging
4. Easy rollback if issues arise
## Troubleshooting
### Common Issues
**Docker not running:**
- Ensure Docker Desktop is installed and running
- Check Docker daemon status: `docker info`
**Permission issues:**
- Ensure your user has permission to run Docker commands
- On Linux, add user to docker group: `sudo usermod -aG docker $USER`
**Git issues:**
- Ensure Git is properly configured with user name and email
- Check that you're in a Git repository when starting isolated work
### Getting Help
If you encounter issues:
1. Check the **[Container Use GitHub repository](https://github.com/dagger/container-use)** for documentation
2. Verify all prerequisites are installed and working
3. Join our [Discord community](https://discord.gg/block-opensource) for support
## Next Steps
With container-use enabled in Goose, you're ready to develop with confidence. Try starting a conversation about a project you've been hesitant to experiment with, and let Goose set up a safe, isolated environment for your exploration.
Remember: with isolated environments, there's no such thing as a failed experiment - only learning opportunities that don't affect your main codebase.

View File

@@ -1,246 +0,0 @@
---
title: JetBrains Extension
description: Use JetBrains MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/1fP5elf9qQM" />
The JetBrains extension is designed to work within your IDE. Goose can accomplish a lot of the developer-centric tasks with the Developer extension that is enabled on install, however, the JetBrains extension provides a more integrated and project-aware way to work with code.
This tutorial covers how to enable and use the JetBrains MCP Server as a built-in Goose extension to integrate with any JetBrains IDE.
## Configuration
1. Add the [MCP Server plugin](https://plugins.jetbrains.com/plugin/26071-mcp-server) to your IDE.
2. Enable built-in Goose extension:
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the upper right corner
2. Click `Advanced Settings`
3. Under `Extensions`, toggle `Jetbrains` to on.
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Built-in Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
// highlight-start
│ ● Built-in Extension (Use an extension that comes with Goose)
// highlight-end
│ ○ Command-line Extension
│ ○ Remote Extension
```
3. Arrow down to the `JetBrains` extension and press Enter
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ ○ Developer Tools
│ ○ Computer Controller
│ ○ Google Drive
│ ○ Memory
// highlight-start
│ ● JetBrains (Connect to jetbrains IDEs)
// highlight-end
```
4. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◇ Which built-in extension would you like to enable?
│ JetBrains
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
└ Enabled jetbrains extension
```
5. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◇ Which built-in extension would you like to enable?
│ JetBrains
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◆ Would you like to add a description?
│ No
// highlight-end
```
</TabItem>
</Tabs>
## Example Usage
In this example, I'm going to upgrade a Java project to the latest LTS version.
:::info LLM
Anthropic's Claude 3.5 Sonnet was used for this task.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open [IntelliJ](https://www.jetbrains.com/idea/download) (JetBrains' Java and Kotlin IDE)
2. Open a new session in Goose Desktop
:::note
You will interact with two separate apps: the Goose Desktop app and the IntelliJ IDE.
:::
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open [IntelliJ](https://www.jetbrains.com/idea/download) (JetBrains' Java and Kotlin IDE)
2. Open a terminal within your IDE and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
:::tip
When using Goose to refactor code, it's recommended to commit your code to version control _before_ making changes. This way, you have a clean snapshot to compare against, making it easy to review Gooses modifications, revert if needed, and track improvements.
:::
### Goose Prompt
```
using the JetBrains IDE tools, upgrade this project to use the latest Java LTS version and refactor the codebase to use newer Java features where beneficial.
```
After 2 minutes, Goose was done with the upgrade! 🎉
### Goose Output
```md
I'll make several improvements to modernize this codebase to use Java 21 (latest LTS) features. Here are the changes I'll implement:
1. Update the `pom.xml` to use Java 21
2. Use newer Java features
[... code changes ...]
Here's a summary of the modernization changes made:
1. `pom.xml`:
- Set Java version to 21
- Enabled preview features
- Updated all dependencies to their latest stable versions
2. `AccountsOverviewPage.java`:
- Made the class `final` since it extends the sealed `Page` class
- Updated stream collection to use `.toList()` instead of `collect(Collectors.toList())`
- Made fields final for better immutability
3. `Page.java`:
- Converted to a sealed class
- Restricted which classes can extend it using `permits`
- Made fields protected and final where appropriate
- Added pattern matching for exception handling
- Implemented Optional for null safety
- Used String Templates for error messages
- Added functional programming concepts with Supplier
- Enhanced error handling with specific exception types
4. `LoginComponent.java`:
- Added a private record for credentials
- Implemented pattern matching with record patterns
- Made fields final for better immutability
5. `AccountTests.java`:
- Implemented structured concurrency using `StructuredTaskScope`
- Used parallel execution for UI and API tasks
- Improved error handling with structured task management
- Used pattern matching and type inference with `var`
6. `BaseTests.java`:
- Implemented structured concurrency for setup tasks
- Improved resource management
- Better exception handling
- Used modern Duration API
7. `APIUtil.java`:
- Implemented String Templates (Java 21 preview feature)
- Used modern text blocks
8. `Customers.java`:
- Added sealed interface for customer types
- Implemented pattern matching for switch expressions
- Added pattern matching for instanceof
- Enhanced type safety with records
Key modern Java features used:
- String Templates (Java 21 Preview)
- Pattern Matching for switch (Java 21)
- Sealed Classes and Interfaces (Java 17)
- Records (Java 16)
- Pattern Matching for instanceof (Java 16)
- Text Blocks (Java 15)
- Switch Expressions (Java 14)
The codebase is now using the latest Java LTS version (21) and incorporates many modern Java features that improve:
- Type safety
- Null safety
- Code readability
- Error handling
- Performance
```
Using the JetBrains extension provided several advantages and made it easier for Goose to:
- navigate through the codebase
- track changes
- make consistent modifications across files
- verify the content of files before and after changes

View File

@@ -1,360 +0,0 @@
---
title: Knowledge Graph Memory Extension
description: Add Knowledge Graph Memory MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/PF6hpDaI9Mc" />
This tutorial covers how to add the [Knowledge Graph Memory MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/memory) as a Goose extension. This enables Goose to analyze relationships, detect patterns, and gain a deeper understanding of your data. The knowledge graph builds on the [memory extension](/docs/tutorials/memory-mcp) by mapping complex relationships between concepts and providing persistent memory across Goose sessions.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-memory&id=knowledge_graph_memory&name=Knowledge%20Graph%20Memory&description=Graph-based%20memory%20system%20for%20persistent%20knowledge%20storage)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-memory
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-memory&id=knowledge_graph_memory&name=Knowledge%20Graph%20Memory&description=Graph-based%20memory%20system%20for%20persistent%20knowledge%20storage)
2. Press `Yes` to confirm the installation
3. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ knowledge graph memory
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ knowledge graph memory
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-memory
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ knowledge graph memory
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-memory
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ knowledge graph memory
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-memory
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ knowledge graph memory
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-memory
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added knowledge graph memory extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, I'll show you how Goose can become an intelligent security reviewer by using connected knowledge patterns to detect and analyze vulnerabilities. Goose will be able to understand the relationship between security issues, their impacts, and mitigations.
This means Goose doesn't just spot issues - it understands how vulnerabilities connect to real world impacts and can suggest comprehensive solutions.
### Step 1: Teach Goose About Security Patterns
#### Goose Prompt #1
```
goose, learn these security vulnerability patterns and their relationships:
1. SQL Injection relates to:
- Unvalidated database inputs
- Data theft risks
- Parameterized query solutions
2. XSS Vulnerabilities connect to:
- Unescaped user output
- Session hijacking risks
- Content sanitization fixes
3.Authentication Weaknesses link to:
- Session management
- Account compromise
- JWT-based solutions
```
#### Goose Output
```
I'll store this security knowledge in the Knowledge Graph Memory with proper entities and relationships
[.... Create Entities .....]
Now, let's create the relationships between these security concepts:
[.... Create Relations .....]
Let me verify what's been stored:
[... Read Graph ...]
I've now stored your security knowledge in the graph with:
1. Vulnerability Entities:
- SQL Injection (with observations about unvalidated inputs and data theft)
- XSS Vulnerabilities (with observations about unescaped output and session risks)
- Authentication Weaknesses (with observations about session management)
2. Solution Entities:
- Parameterized Queries
- Content Sanitization
- JWT Authentication
3. Connected Relationships:
- Vulnerabilities → their potential impacts
- Solutions → the vulnerabilities they mitigate
The knowledge is now structured in a way that I can:
- Trace vulnerability impact chains
- Identify appropriate solutions for each vulnerability
- Understand how different security issues are related
```
### Step 2: Use Connected Knowledge for Code Review
#### Goose Prompt # 2
```
Review this API endpoint for security issues:
```
```js
app.post('/api/login', (req, res) => {
const { username, password } = req.body;
const query = `SELECT * FROM users WHERE username = '${username}'`;
db.query(query, (err, result) => {
if (err) throw err;
if (result.length > 0) {
res.cookie('user', username);
res.json({ success: true });
}
});
});
```
#### Goose Output
```
I'll analyze this code using our connected knowledge graph to trace security vulnerabilities and their implications:
[.... Search Nodes ... Open Nodes ...]
Based on our knowledge graph analysis, I've found multiple critical security issues:
1. SQL Injection Vulnerability:
- Issue: Using string concatenation in query WHERE username = '${username}'
- Impact Chain: SQL Injection → Data Theft
- Risk Level: Critical
- Solution (from parameterized_queries): Use parameterized queries instead
2. Authentication Weakness:
- Issue: Using basic cookie-based session res.cookie('user', username)
- Impact Chain: Auth Weakness → Account Compromise
- Risk Level: High
- Solution (from jwt_auth): Implement JWT with proper expiration
```
```js
Here's the secure implementation based on our stored patterns:
app.post('/api/login', async (req, res) => {
try {
// Input validation
if (!req.body.username || !req.body.password) {
return res.status(400).json({
success: false,
error: 'Username and password required'
});
}
// Parameterized query (prevents SQL injection)
const query = 'SELECT * FROM users WHERE username = ?';
const result = await db.query(query, [req.body.username]);
if (!result.length) {
return res.status(401).json({
success: false,
error: 'Invalid credentials'
});
}
// Password verification would go here
// const validPassword = await bcrypt.compare(req.body.password, result[0].password);
// JWT-based session management (prevents session hijacking)
const token = jwt.sign(
{ userId: result[0].id },
process.env.JWT_SECRET,
{ expiresIn: '1h' }
);
res.json({
success: true,
token: token
});
} catch (error) {
res.status(500).json({
success: false,
error: 'Internal server error'
});
}
});
```
```
The fixes address the vulnerability chains our knowledge graph identified:
1. SQL Injection → Data Theft: Mitigated by parameterized queries
2. Auth Weakness → Account Compromise: Mitigated by JWT implementation
Additional security improvements based on connected patterns:
- Added input validation
- Proper error handling
- No exposure of internal errors
- Token-based instead of cookie-based auth
- Expiration time on authentication
Would you like me to:
1. Explain any of these security relationships in more detail?
2. Show how to implement additional security patterns?
3. Analyze another endpoint?
```

View File

@@ -1,256 +0,0 @@
---
title: mbot Extension
description: Control a MakeBlock mbot2 rover through MQTT and MCP as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/QKg2Q6YCzdw" />
This tutorial will get you started with [deemkeen's MQTT MCP server](https://github.com/deemkeen/mbotmcp) for the [MakeBlock mbot2 rover](https://www.makeblock.com/products/buy-mbot2), and outline some code changes we made along the way.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=/path/to/java&arg=-jar&arg=/path/to/mbotmcp-0.0.1-SNAPSHOT.jar&name=mbot2&description=mbot2&env=MQTT_SERVER_URI%3Dtcp://1.2.3.4:1883&env=MQTT_USERNAME%3Dyour_username&env=MQTT_PASSWORD%3Dyour_password)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
/path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
```
</TabItem>
</Tabs>
**Environment Variable**
```
MQTT_SERVER_URI: tcp://1.2.3.4:1883
MQTT_PASSWORD: <string or blank>
MQTT_USERNAME: <string or blank>
```
:::
## Configuration
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=/path/to/java&arg=-jar&arg=/path/to/mbotmcp-0.0.1-SNAPSHOT.jar&name=mbot2&description=mbot2&env=MQTT_SERVER_URI%3Dtcp://1.2.3.4:1883&env=MQTT_USERNAME%3Dyour_username&env=MQTT_PASSWORD%3Dyour_password)
2. Press `Yes` to confirm the installation
3. Get your MQTT server URI, and your username/password if your MQTT uses authentication
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
1. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
2. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ mbot2
// highlight-end
```
3. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ mbot2
// highlight-start
◆ What command should be run?
│ /path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
// highlight-end
```
4. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ mbot2
◇ What command should be run?
│ /path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
5. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ mbot2
◇ What command should be run?
│ /path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
6. Add environment variables for MQTT
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ mbot2
◇ What command should be run?
│ /path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ MQTT_SERVER_URI
◇ Environment variable value:
│ tcp://1.2.3.4:1883
◇ Add another environment variable?
│ Yes
◇ Environment variable name:
│ MQTT_USERNAME
◇ Environment variable value:
│ username
◇ Add another environment variable?
│ Yes
◇ Environment variable name:
│ MQTT_PASSWORD
◇ Environment variable value:
│ password
// highlight-end
└ Added mbot2 extension
```
:::info
MQTT_USERNAME and MQTT_PASSWORD are required to exist, but can be empty strings if your MQTT server does not require authentication.
:::
</TabItem>
</Tabs>
## Example Usage
The available commands allow you to drive the mbot2 rover around, including:
- "turn left" or "turn right""
- drive "forward" or "backward"
- "explore" randomly
- "stop" exploring
- "beep"
The default distance to travel is 70cm (about 27 inches), and the turn angles are set to 90 degrees. You can change these values in the [Python code on the mbot2](https://github.com/deemkeen/mbotmcp/blob/main/assets/mbot-mqtt.py). The mbot2 has a lot of other capabilities with the proximity sensors, lights, and color detection sensor on the bottom of the unit that you can add to the Python code, and will need to update [the Java code](https://github.com/deemkeen/mbotmcp/blob/main/src/main/java/de/emkeen/mbotmcp/service/BotService.java) to include those commands via MCP.
#### Goose Interaction
```
( O)> Let my mbot2 explore the area
Okay, let's get the mbot2 rover moving. I will send it on a mission to explore the area.
> Mbotexplore
( O)> stop the rover, turn left and move forward
Alright, I will stop the rover, turn to the left, and then move it forward.
> Mbotstop
> Mbotleft
> Mbotforward
( O)> let's move backward and beep so I know when it's finished
Sure, I will move the rover backward and beep when it's done.
> Mbotbackward
> Mbotbeep
Okay, the mbot2 has moved and beeped. What else would you like to do with the rover?
```

View File

@@ -1,246 +0,0 @@
---
title: Memory Extension
description: Use Memory MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://youtube.com/embed/BZ0yrSLXQwk" />
The Memory extension turns Goose into a knowledgeable assistant by allowing you to teach it personalized key information (e.g. commands, code snippets, preferences and configurations) that it can recall and apply later. Whether its project-specific (local) or universal (global) knowledge, Goose learns and remembers what matters most to you.
This tutorial covers enabling and using the Memory MCP Server, which is a built-in Goose extension.
## Configuration
1. Ensure extension is enabled:
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the upper right corner
2. Click `Advanced Settings`
3. Under `Extensions`, toggle `Memory` to on.
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Built-in Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
// highlight-start
│ ● Built-in Extension (Use an extension that comes with Goose)
// highlight-end
│ ○ Command-line Extension
│ ○ Remote Extension
```
3. Arrow down to the `Memory` extension and press Enter
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ ○ Developer Tools
│ ○ Computer Controller
// highlight-start
│ ● Memory
// highlight-end
| ○ JetBrains
```
4. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◇ Which built-in extension would you like to enable?
│ Memory
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
└ Enabled Memory extension
```
5. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◇ Which built-in extension would you like to enable?
│ Memory
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◆ Would you like to add a description?
│ No
// highlight-end
└ Enabled Memory extension
```
</TabItem>
</Tabs>
## Why Use Memory?
With the Memory extension, youre not just storing static notes, youre teaching Goose how to assist you better. Imagine telling Goose:
> _learn everything about MCP servers and save it to memory._
Later, you can ask:
> _utilizing our MCP server knowledge help me build an MCP server._
Goose will recall everything youve saved as long as you instruct it to remember. This makes it easier to have consistent results when working with Goose.
## Trigger Words and When to Use Them
Goose also recognizes certain trigger words that signal when to store, retrieve, or remove memory.
| **Trigger Words** | **When to Use** |
|---------------------|----------------|
| remember | Store useful info for later use |
| forget | Remove a stored memory |
| memory | General memory-related actions |
| save | Save a command, config, or preference |
| remove memory | Delete specific stored data |
| clear memory | Wipe all stored memories |
| search memory | Find previously stored data |
| find memory | Locate specific saved information |
## Example Usage
In this example, Ill show you how to make Goose a knowledgeable development assistant by teaching it about your projects API standards. With the Memory extension, Goose can store structured information and recall it when needed, helping you stay consistent in your work.
This means you no longer have to repeat yourself. Goose will remember your projects requirements and automatically apply them to new tasks.
:::tip
If you frequently work with API standards or other structured knowledge, Goose may automatically suggest saving them to memory for you when it detects a pattern in your workflow.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Step 1: Teach Goose Your API Standards
#### Goose Prompt #1
```
Goose, learn our API development standards:
- All endpoints must use TypeScript interfaces
- Error responses follow RFC 7807 Problem Details spec
- Rate limiting headers are required
- Authentication uses JWT in Authorization header
- All endpoints need OpenAPI documentation
Remember this so you can help me follow these practices.
```
#### Goose Output
```
I've learned your API standards. I'll help enforce these requirements when working on API endpoints.
Storing in:
- Category: development_standards
- Tags: #api #typescript #security #documentation
- Scope: global (these are general standards)
I can now help with:
- API endpoint implementation
- Error handling patterns
- Authentication flows
- Documentation requirements
```
### Step 2: Use Stored Knowledge to Create a New API Endpoint
#### Goose Prompt # 2
```
Help me create a new endpoint for user preferences
```
#### Goose Output
```
I see you need a new endpoint. Based on our API development standards that I have stored in memory, I'll ensure it meets all our requirements.
[.. Checking stored API standards ...]
I've included all our required elements:
✅ TypeScript interfaces
✅ RFC 7807 error response format
✅ Rate limiting
✅ JWT auth header
✅ OpenAPI documentation
Here's your compliant endpoint:
interface UserPreferences {
userId: string;
theme: 'light' | 'dark';
notifications: boolean;
timezone: string;
}
interface ErrorResponse {
type: string;
title: string;
status: number;
detail: string;
instance: string;
}
@Route('/api/users/:userId/preferences')
class UserPreferencesController {
@Get()
@RateLimit(100) // Adding required rate limiting
@OpenAPI({ ... }) // Including mandatory OpenAPI docs
async getUserPreferences(
@Header('Authorization') token: string, // JWT auth as per our standard
@Param('userId') userId: string
): Promise<UserPreferences | ErrorResponse> {
// Implementation following our error handling pattern
}
}
Would you like me to implement the full endpoint logic?
```

View File

@@ -1,341 +0,0 @@
---
title: Nostrbook Extension
description: Add Nostrbook MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
This tutorial covers how to add the [Nostrbook MCP Server](https://gitlab.com/soapbox-pub/nostrbook) as a Goose extension to provide access to a comprehensive registry of Nostr documentation that helps users understand the decentralized social protocol, its implementation possibilities, and technical specifications.
:::tip TLDR
**Command**
```sh
npx -y @nostrbook/mcp@latest
```
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40nostrbook%2Fmcp&id=nostrbook&name=Nostrbook&description=A%20comprehensive%20registry%20of%20Nostr%20documentation%20with%20structured%20knowledge)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ Nostrbook
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Nostrbook
// highlight-start
◆ What command should be run?
│ npx -y @nostrbook/mcp@latest
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Nostrbook
◇ What command should be run?
│ npx -y @nostrbook/mcp@latest
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Nostrbook
◇ What command should be run?
│ npx -y @nostrbook/mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Nostrbook
◇ What command should be run?
│ npx -y @nostrbook/mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added Nostrbook extension
```
</TabItem>
</Tabs>
## Example Usage
### Goose Prompt
> _Goose, what is the NIP-61 and how can I implement it?._
### Goose Output
Note that IDs have been changed to generic ones
:::note CLI
<details>
<summary>Tool Calls</summary>
─── read_nip | nostrbook ──────────────────────────
nip: 61
</details>
# NIP-61: Implementing Nutzaps
NIP-61 defines "Nutzaps," which are P2PK Cashu tokens where the payment itself acts as the receipt. This protocol allows for Bitcoin micropayments through the Nostr ecosystem using Cashu tokens.
## Core Concept
Nutzaps enable users to send small Bitcoin payments to each other through Nostr events, with the tokens being locked to the recipient's specified public key.
## Implementation Guide
### Prerequisites
1. Familiarize yourself with [Cashu](https://cashu.space/) and [P2PK token locking](https://github.com/cashubtc/nuts/blob/main/11.md)
2. Understand [NIP-60](https://github.com/nostr-protocol/nips/blob/master/60.md) for wallet functionality
3. Ensure your implementation supports NUT-11 (P2PK) and NUT-12 (DLEQ proofs)
### Step 1: Set Up Recipient Information (For Receiving Nutzaps)
Create and publish a `kind:10019` event to inform others how to send you money:
```json
{
"kind": 10019,
"tags": [
["relay", "wss://your-relay1.com"],
["relay", "wss://your-relay2.com"],
["mint", "https://your-trusted-mint.com", "sat"],
["pubkey", "<your-p2pk-pubkey>"]
]
}
```
- The `pubkey` should be a dedicated public key (NOT your Nostr identity key)
- Store the corresponding private key safely in your NIP-60 wallet event
- List only mints you trust and monitor
### Step 2: Building the Sender Functionality
To implement nutzapping:
1. **Query recipient information**:
```javascript
// Fetch recipient's kind:10019 event
const recipientInfo = await relay.get({
kinds: [10019],
authors: [recipientPubkey]
});
```
2. **Extract mint and P2PK information**:
```javascript
const recipientMints = recipientInfo.tags
.filter(tag => tag[0] === 'mint')
.map(tag => tag[1]);
const recipientLockKey = recipientInfo.tags
.find(tag => tag[0] === 'pubkey')?.[1];
```
3. **Mint or swap tokens** at one of the recipient's trusted mints, P2PK-locking them to their specified key
4. **Publish the nutzap event**:
```json
{
"kind": 9321,
"content": "Thanks for your post!",
"tags": [
["proof", "{\"amount\":1,\"C\":\"02...3f\",\"id\":\"000...\",\"secret\":\"[\\\"P2PK\\\",...]\"}"],
["u", "https://recipient-specified-mint.com"],
["e", "<event-being-zapped>", "<relay-hint>"],
["p", "<recipient-pubkey>"]
]
}
```
### Step 3: Building the Recipient Functionality
To implement nutzap receiving:
1. **Query for incoming nutzaps**:
```javascript
// Subscribe to nutzap events
relay.subscribe([
{
kinds: [9321],
"#p": [myPubkey],
"#u": myTrustedMints,
since: lastCheckTimestamp
}
]);
```
2. **Validate incoming nutzaps**:
- Verify the token is from a mint you've specified
- Verify the token is locked to your P2PK key
- Verify the DLEQ proof
3. **Redeem the token**:
- Swap the P2PK token into your wallet
- Create a `kind:7376` event to record redemption:
```json
{
"kind": 7376,
"content": "<encrypted-content>",
"tags": [
["e", "<nutzap-event-id>", "", "redeemed"],
["p", "<sender-pubkey>"]
]
}
```
### Important Implementation Details
1. **P2PK Key Prefixing**: Always prefix the P2PK-lock public key with "02" for compatibility
2. **Token Verification**: Implement local verification of DLEQ proofs
3. **Mint URL Normalization**: Normalize mint URLs to avoid issues with slight URL variations
4. **User Guidance**: Guide users to use only NUT-11 and NUT-12 compatible mints
5. **Publishing Locations**: Publish nutzap events to the recipient's specified relays
## Testing
When testing your implementation:
1. Create test nutzaps with small amounts
2. Verify token redemption works correctly
3. Check that redemption records are properly created
4. Test with multiple mints for compatibility
## Security Considerations
- Never use the user's main Nostr key for P2PK operations
- Ensure proper encryption of sensitive wallet data
- Validate all proofs before attempting to redeem tokens
- Only interact with explicitly trusted mints
By following these steps, you can implement a complete nutzap solution that allows users to send and receive Bitcoin micropayments through the Nostr protocol using Cashu tokens.
:::

View File

@@ -1,301 +0,0 @@
---
title: PDF Reader Extension
description: Add PDF Reader MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/EJf2_iZfaWk" />
This tutorial covers how to add the [PDF Reader MCP Server](https://github.com/michaelneale/mcp-read-pdf) as a Goose extension, enabling Goose to read and extract text from protected and unprotected PDFs.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&arg=mcp-read-pdf&id=pdf_read&name=PDF%20Reader&description=Read%20large%20and%20complex%20PDF%20documents)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx mcp-read-pdf
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&arg=mcp-read-pdf&id=pdf_read&name=PDF%20Reader&description=Read%20large%20and%20complex%20PDF%20documents)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ pdf
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ pdf
// highlight-start
◆ What command should be run?
│ uvx mcp-read-pdf
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ pdf
◇ What command should be run?
│ uvx mcp-read-pdf
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ pdf
◇ What command should be run?
│ uvx mcp-read-pdf
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ pdf
◇ What command should be run?
│ uvx mcp-read-pdf
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added pdf extension
```
</TabItem>
</Tabs>
## Example Usage
This example shows how to use the PDF Reader Extension to analyze an applicant's resume for specific attributes. With the PDF Reader extension, Goose can read specific pages or entire documents as well as extract text from large and complex PDFs.
### Goose Prompt
```
Read the resume at ~/Downloads/resume.pdf and evaluate how well this candidate aligns with the following role requirements:
- 5+ years of backend development experience
- Strong system design and distributed systems knowledge
- Cloud infrastructure experience (AWS preferred)
- Prior experience leading technical projects or teams
- Bonus: familiarity with LLMs or AI/ML tools
Give a score out of 5 for each requirement, supporting evidence, and a summary at the end with pros, cons, and a decision: Strong Fit / Moderate Fit / Weak Fit.
```
### Goose Output
:::note CLI
I'll help analyze the resume against those requirements. Let me read the PDF first.
─── read_pdf | pdf ──────────────────
file_path: ~/Downloads/resume.pdf
I'll now evaluate the candidate against each requirement based on the resume content:
**1. Backend Development Experience (5+ years)**
**Score: 5/5**
- 7+ years of experience as a Software Engineer at various companies
- Extensive backend development work with Java, Python, and Go
- Built and maintained multiple backend services and APIs
- Deep experience with microservices architecture and RESTful APIs
**2. System Design and Distributed Systems Knowledge**
**Score: 4.5/5**
- Designed and implemented distributed caching systems
- Experience with high-throughput message queuing systems
- Implemented service mesh architecture for microservices
- Strong understanding of scalability and reliability patterns
- Worked on systems processing millions of daily transactions
**3. Cloud Infrastructure Experience (AWS preferred)**
**Score: 4/5**
- Significant AWS experience including:
- EC2, ECS, and Lambda
- S3 and DynamoDB
- CloudWatch and CloudFormation
- Experience with infrastructure as code
- Kubernetes deployment and management
- CI/CD pipeline implementation in cloud environments
**4. Prior Experience Leading Technical Projects or Teams**
**Score: 4.5/5**
- Led a team of 5 engineers in developing a new payment processing system
- Mentored junior developers and conducted technical interviews
- Managed multiple critical projects from inception to delivery
- Successfully coordinated cross-functional teams
- Demonstrated technical leadership in architecture decisions
**5. Bonus: Familiarity with LLMs or AI/ML Tools**
**Score: 3.5/5**
- Recent experience implementing ML model deployment pipelines
- Worked with natural language processing systems
- Basic understanding of ML concepts and frameworks
- Some exposure to LLM integration, though not extensive
**Summary**
**Pros:**
- Exceeds the required years of backend development experience
- Strong technical depth across multiple domains
- Proven leadership and project management capabilities
- Comprehensive cloud infrastructure experience
- Good foundation in modern AI/ML technologies
**Cons:**
- While experienced with AWS, some newer cloud services experience could be beneficial
- AI/ML experience is good but not deeply specialized in LLMs
- Could benefit from more experience with specific cloud-native patterns
**Decision: Strong Fit**
The candidate demonstrates exceptional strength in core requirements, particularly in backend development and system design. Their leadership experience and cloud infrastructure knowledge are very solid. While their AI/ML experience isn't extensive, it's sufficient for the role where it's listed as a bonus qualification. The breadth and depth of their technical experience, combined with demonstrated leadership capabilities, make them a strong fit for the position.
Their overall profile suggests they would be able to make immediate contributions while having the capacity to grow into any areas where they might need additional expertise. The strong foundation in distributed systems and proven track record of leading teams makes them particularly valuable for a technical leadership role.
**Overall Scores Summary:**
1. Backend Development: 5/5
2. System Design: 4.5/5
3. Cloud Infrastructure: 4/5
4. Leadership Experience: 4.5/5
5. AI/ML (Bonus): 3.5/5
**Total Score: 21.5/25** (not including bonus)
:::

View File

@@ -1,238 +0,0 @@
---
title: Pieces for Developers Extension
description: Add Pieces for Developers MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/V8zp9m9__t4" />
This tutorial covers how to add the [Pieces for Developers MCP Server](https://docs.pieces.app/products/mcp/get-started?utm_source=goose&utm_medium=collab&utm_campaign=mcp) as a Goose extension to enable interaction with your Pieces Long-Term Memory.
## Configuration
1. Download [PiecesOS](https://pieces.app/)
2. Enable [Long-Term Memory Context](https://docs.pieces.app/products/quick-guides/ltm-context) in PiecesOS
3. Locate your MCP Server URL
- In PiecesOS, navigate to Settings > Model Context Protocol (MCP)
- Copy the server URL
:::tip
The default server URL is shown below. PiecesOS may use a different port if 39300 is already in use on your system:
```
http://localhost:39300/model_context_protocol/2024-11-05/sse
```
:::
### Add Pieces MCP Server
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?url=http%3A%2F%2Flocalhost%3A39300%2Fmodel_context_protocol%2F2024-11-05%2Fsse&id=pieces&name=Pieces%20for%20Developers&description=Provides%20access%20to%20your%20Pieces%20Long-Term%20Memory.%20You%20need%20to%20have%20Pieces%20installed%20to%20use%20this.)
2. Press `Yes` to confirm the installation
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Remote Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
│ ○ Command-line Extension (Run a local command or script)
// highlight-start
│ ● Remote Extension
// highlight-end
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
// highlight-start
◆ What would you like to call this extension?
│ Pieces
// highlight-end
```
4. Enter the SSE endpoint URI.
:::info
Use the server URL you copied from PiecesOS settings earlier.
:::
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ Pieces
// highlight-start
◆ What is the SSE endpoint URI?
│ http://localhost:39300/model_context_protocol/2024-11-05/sse
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ Pieces
◇ What is the SSE endpoint URI?
│ http://localhost:39300/model_context_protocol/2024-11-05/sse
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Add a description if you want, otherwise to leave the description blank select No.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ Pieces
◇ What is the SSE endpoint URI?
│ http://localhost:39300/model_context_protocol/2024-11-05/sse
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◆ Would you like to add a description?
│ ○ Yes / ● No
// highlight-end
```
7. No environment variables are needed, so select No.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ Pieces
◇ What is the SSE endpoint URI?
│ http://localhost:39300/model_context_protocol/2024-11-05/sse
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ ○ Yes / ● No
// highlight-end
```
</TabItem>
</Tabs>
## Example Usage
Let's use the Pieces for Developers MCP server to generate a status update for a standup meeting based on your activities on the previous day.
### Goose Prompt
```
I need a status update for what I was using yesterday. Create a report with 5 bullet points based off the most important activities, and give each one a brief description.
```
### Goose Output
```
Here's a report summarizing your key activities from yesterday, based on the most important interactions and applications you were using:
1. Code Development with Goose:
Activity: You worked on integrating SSE MCP servers into the Goose CLI, making enhancements to handle extensions via schema URLs.
Description: This task involved modifying code and testing new integrations to support advanced functionalities. It also included interactions with the Goose community on Discord for feedback and troubleshooting.
2. Documentation Updates:
Activity: You updated and managed documentation related to the Goose project and MCP integrations.
Description: This involved preparing documentation for new features, including usage guidelines and technical details, aiding in the improvement of user experience and technical instructions.
3. Community Interaction on Discord:
Activity: Engaged with the Block Open Source Community to discuss project developments and potential collaborations.
Description: You actively participated in community discussions, exchanging insights on project enhancements, and exploring collaborative opportunities with other developers and contributors.
4. Managing and Testing Extensions:
Activity: You focused on testing and managing various extensions through the Goose platform.
Description: This included configuring and validating different extensions, ensuring their compatibility and functionality, and incorporating feedback from testing.
5. Content and Integration Planning:
Activity: Planned integration workflows for MCP and documented their use cases.
Description: You worked on strategies for implementing MCP integrations effectively, involving planning sessions to optimize future project deployments and align them with user requirements and project objectives.
These activities demonstrate a productive day with a focus on development, collaboration, and content management within your technical community.
```
:::tip
For more examples of prompts you can use with the Pieces for Developers MCP Server, see the [Pieces MCP prompting guide](https://docs.pieces.app/products/mcp/prompting?utm_source=goose&utm_medium=collab&utm_campaign=mcp).
:::

View File

@@ -1,326 +0,0 @@
---
title: Playwright Extension
description: Add Playwright MCP Server as a Goose Extension for Modern Web Testing
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/iAxiFMlTE1Q" />
This tutorial covers how to add the Playwright MCP Server as a Goose extension, to enable cross-browser testing and web automation across Chromium and Webkit.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@playwright/mcp@latest&id=playwright&name=Playwright&description=Modern%20web%20testing%20and%20automation)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @playwright/mcp@latest
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@playwright/mcp@latest&id=playwright&name=Playwright&description=Modern%20web%20testing%20and%20automation)
2. Press `Yes` to confirm the installation
3. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
│ ● Command-line Extension (Run a local command or script)
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◆ What would you like to call this extension?
│ Playwright
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Playwright
◆ What command should be run?
│ npx -y @playwright/mcp@latest
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Playwright
◇ What command should be run?
│ npx -y @playwright/mcp@latest
◆ Please set the timeout for this tool (in secs):
│ 300
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Playwright
◇ What command should be run?
│ npx -y @playwright/mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
◆ Would you like to add a description?
│ No
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Playwright
◇ What command should be run?
│ npx -y @playwright/mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
◆ Would you like to add environment variables?
│ No
└ Added Playwright extension
```
</TabItem>
</Tabs>
## Example Usage
Let's use Goose with the Playwright extension to create a cross-browser testing suite. In this example, we'll demonstrate how Goose can help you:
1. Test a web application across multiple browsers
2. Generate maintainable test code
3. Capture screenshots for visual comparison
:::info LLM
Anthropic's Claude 3.5 Sonnet was used for this task.
:::
### Goose Prompt
```
Test the random redesign generator app (https://blackgirlbytes.github.io/random-redesign-picker/)
in Chromium and WebKit. For each browser:
1. Navigate to the page
2. Click the "Pick My Combo" button
3. Verify the text changes
4. Take a screenshot
Then generate a Playwright test that works across all browsers.
```
### Goose Output
```
Let's start with Chromium:
─── browser_navigate | playwright ──────────────────────────
url: https://blackgirlbytes.github....
Now let's wait for and click the button:
─── browser_click | playwright ──────────────────────────
element: button with text "Pick My Combo"
ref: <button>
Let's capture the first combo and click again to verify it changes:
─── browser_click | playwright ──────────────────────────
element: button with text "Pick My Combo"
ref: <button>
Let's take a screenshot of the Chromium view:
─── browser_take_screenshot | playwright ──────────────────────────
filename: chromium-redesign.png
Now let's test in Safari. I'll open a new tab for Safari:
─── browser_tab_new | playwright ──────────────────────────
url: https://blackgirlbytes.github....
Let's click the button in Safari:
─── browser_click | playwright ──────────────────────────
element: button with text "Pick My Combo"
ref: <button>
Let's click again to verify the text changes:
─── browser_click | playwright ──────────────────────────
element: button with text "Pick My Combo"
ref: <button>
Let's take a screenshot of the Safari view:
─── browser_take_screenshot | playwright ──────────────────────────
filename: safari-redesign.png
Now I'll generate a Playwright test that runs in all three browser environments. The test will verify the core functionality we just tested manually:
─── browser_generate_playwright_test | playwright ──────────────────────────
name: Random Redesign Picker Test
description: Test the random redesign generator functionality across browsers
steps: [
"Navigate to the application",
"Verify initial page content",
"Click button to generate first combination",
"Click button again to generate second combination",
"Verify combinations are different"
]
Here's the generated Playwright test that will run across Chromium, Firefox, and Safari:
import { test, expect } from '@playwright/test';
test.describe('Random Redesign Picker', () => {
test('should generate different random combinations', async ({ page }) => {
// Navigate to the application
await page.goto('https://blackgirlbytes.github.io/random-redesign-picker/');
// Verify initial page content
await expect(page).toHaveTitle('Redesign for the Ridiculous');
await expect(page.getByRole('heading', { level: 1 })).toContainText('🎲 Redesign for the Ridiculous');
// Verify button is visible
const comboButton = page.getByRole('button', { name: '🎉 Pick My Combo' });
await expect(comboButton).toBeVisible();
// Click button and get first combination
await comboButton.click();
// Wait for and store first combo
const firstComboElement = page.locator('generic').filter({ hasText: /^(?!.*🎲).*$/ }).last();
await expect(firstComboElement).toBeVisible();
const firstComboText = await firstComboElement.textContent();
// Generate second combination
await comboButton.click();
// Wait for and get second combo
const secondComboElement = page.locator('generic').filter({ hasText: /^(?!.*🎲).*$/ }).last();
await expect(secondComboElement).toBeVisible();
const secondComboText = await secondComboElement.textContent();
// Verify combos are different
expect(secondComboText).not.toEqual(firstComboText);
});
});
To use this test, you would need to:
1. Save it as `tests/random-redesign.spec.ts`
2. Configure your `playwright.config.ts` to include all three browsers:
import { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
projects: [
{
name: 'chromium',
use: { browserName: 'chromium' },
},
{
name: 'firefox',
use: { browserName: 'firefox' },
},
{
name: 'webkit',
use: { browserName: 'webkit' },
},
],
};
export default config;
You can then run the tests using:
npx playwright test
This will execute the test in all three browser environments. The test verifies:
1. The page loads correctly
2. The title and heading are correct
3. The combo button is visible
4. Clicking the button generates a combination
5. Clicking again generates a different combination
The test uses robust selectors and proper waiting mechanisms to ensure reliability across different browsers and network conditions.
```

View File

@@ -1,225 +0,0 @@
---
title: PostgreSQL Extension
description: Add PostgreSQL MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/PZlYQ5IthYM" />
The PostgreSQL MCP Server extension allows Goose to interact directly with your PostgreSQL databases, enabling database operations, querying, and schema management capabilities. This makes it easy to work with your databases through natural language interactions.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@modelcontextprotocol/server-postgres&arg=Your%20PostgreSQL%20connection%20URL&id=postgres&name=PostgreSQL&description=PostgreSQL%20database%20integration)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb
```
</TabItem>
</Tabs>
:::
## Customizing Your Connection
It's worth noting that this MCP server only allows connecting to a single predefined database at this time, and the connection URL must be specified in the command. We're using `postgresql://localhost/mydb` as an example here to access a local database, but you can configure this for your own environment.
The PostgreSQL connection URL follows this format:
```
postgresql://username:password@hostname:5432/database
```
Where:
- `username`: Your PostgreSQL user
- `password`: Your PostgreSQL password
- `hostname`: The host where PostgreSQL is running (e.g., localhost, IP address, or domain)
- `5432`: The default PostgreSQL port (change if using a different port)
- `database`: The name of your database
Examples:
- Local database: `postgresql://localhost/mydb`
- Local with credentials: `postgresql://myuser:mypass@localhost/mydb`
- Remote database: `postgresql://user:pass@db.example.com:5432/production`
:::caution
Never commit connection strings with credentials to version control! Use environment variables or secure configuration management.
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=@modelcontextprotocol/server-postgres&arg=Your%20PostgreSQL%20connection%20URL&id=postgres&name=PostgreSQL&description=PostgreSQL%20database%20integration)
2. Press `Yes` to confirm the installation
3. Enter your PostgreSQL connection URL in the format: `postgresql://username:password@hostname:5432/database`
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Name your extension
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ PostgreSQL
// highlight-end
```
4. Enter the command with your database connection URL
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What would you like to call this extension?
│ PostgreSQL
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb
// highlight-end
```
5. Set the timeout (default 300s is usually sufficient)
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What would you like to call this extension?
│ PostgreSQL
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What would you like to call this extension?
│ PostgreSQL
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◆ Would you like to add a description?
│ No
// highlight-end
```
7. Configure your PostgreSQL connection URL
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What would you like to call this extension?
│ PostgreSQL
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added PostgreSQL extension
```
</TabItem>
</Tabs>
## Example Usage
The PostgreSQL extension enables you to query and analyze data or give you information about the table structures. The extension is only capable of *read-only* operations, so you can use it to get information about your database, but not to modify it.
Just describe what you want to do in natural language, and Goose will help you accomplish it using the appropriate SQL commands and PostgreSQL features.
#### Goose Prompt
```
Search my database for any students whose current GPA is higher than the average in their current grade level. Tell me their name, grade, and how much they exceed their grades average GPA, and the average GPA.
```
#### Goose Output
```
Based on the query results, here are the students who are performing above their grade level average:
Grade 11
Emma Johnson
GPA: 4.00
Grade Average: 3.90
Exceeds average by: 0.10 points
Grade 12
John Smith
GPA: 3.85
Grade Average: 3.78
Exceeds average by: 0.08 points
Both students are performing well above their respective grade level averages. Emma Johnson in Grade 11 shows the highest difference above the grade average, exceeding it by 0.10 points, while John Smith in Grade 12 exceeds his grade's average by 0.08 points.
```

View File

@@ -1,431 +0,0 @@
---
title: Puppeteer Extension
description: Add Puppeteer MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://youtube.com/embed/rms0wVGnlXA" />
This tutorial covers how to add the [Puppeteer MCP Server](https://github.com/modelcontextprotocol/servers/tree/HEAD/src/puppeteer) as a Goose extension, enabling Goose to interact with websites - navigating pages, filling forms, clicking buttons, taking screenshots, and executing JavaScript in a real browser environment.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-puppeteer&id=puppeteer&name=Puppeteer&description=Headless%20browser%20automation)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @modelcontextprotocol/server-puppeteer
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol%2Fserver-puppeteer&id=puppeteer&name=Puppeteer&description=Headless%20browser%20automation)
2. Press `Yes` to confirm the installation
3. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ Puppeteer
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Puppeteer
// highlight-start
◆ What command should be run?
│ npx -y @modelcontextprotocol/server-puppeteer
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Puppeteer
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-puppeteer
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Puppeteer
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-puppeteer
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Puppeteer
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-puppeteer
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added puppeteer extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, Ill show you how to use Goose with the Puppeteer Extension to perform an accessibility audit on a website. By automating browser interactions, Goose can navigate the site, test keyboard navigation, check color contrast, analyze ARIA attributes, and generate a detailed report with recommendations and code fixes.
This allows you to quickly identify and resolve accessibility issues without manually inspecting each page.
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Goose Prompt
```
Can you check if my website is accessible? Please conduct a full accessibility audit, focusing on the following:
1. Keyboard Navigation: Test all interactive elements (links, buttons, dropdowns, etc.) to ensure they are accessible without a mouse.
2. Color Contrast Analysis: Verify that all text and UI elements meet WCAG contrast ratio standards.
3. Screen Reader Compatibility: Test whether a screen reader can properly interpret content and navigation.
4. ARIA & Semantic HTML Validation: Identify any missing or misused ARIA attributes and ensure proper semantic structure.
5. Error Identification & Screenshots: Provide a comprehensive report with identified issues, along with screenshots if necessary.
6. Fixes & Code Recommendations: Suggest HTML, CSS, or JavaScript changes to resolve any compliance issues.
Here is the website to test: https://broken-workshop.dequelabs.com/. I want to ensure that our documentation meets accessibility standards. Please generate a detailed report with steps to fix any issues found.
```
### Goose Output
:::note Desktop
I'll help you conduct a comprehensive accessibility audit of the website. I'll use a combination of automated and manual testing approaches to evaluate different accessibility aspects.
1. First, let's navigate to the site
2. Take screenshots and perform keyboard navigation testing
3. Run accessibility audits including color contrast analysis
4. Document findings
**Let's begin:**
`─── Puppeteer Navigate ──────────────────────────`
**Let's take a screenshot of the homepage for reference:**
`─── Puppeteer Screenshot ────────────────────────`
I'll conduct a detailed accessibility audit of the recipe dashboard website. From the initial view, I can already identify several accessibility concerns. Let me break down the findings by category:
**1. Keyboard Navigation Issues:**
- The "COOK" buttons for recipes appear to lack proper focus indicators
- The edit icons (pencil icons) on recipe cards don't seem to have keyboard focus states
- The navigation sequence may not be logical as there's no clear tab order
**2. Color Contrast Issues:**
- The light gray text used for "Difficulty" labels may not meet WCAG contrast requirements
- The green "Beginner" text appears to have insufficient contrast against the white background
- The bar chart in the "YUMMINESS" section uses colors that may be difficult to distinguish
**3. Semantic Structure Problems:**
- The heading hierarchy is unclear - "RECIPE DASHBOARD" appears to be an h1, but recipe titles don't seem to use proper heading tags
- The statistics (9 EGGS USED, 10 RECIPES MADE, etc.) don't appear to use semantic list structures
- The chart lacks proper ARIA labels for screen readers
**4. ARIA and Screen Reader Issues:**
- The recipe cards don't appear to have proper aria-labelledby associations
- The edit buttons lack aria-labels describing their purpose
- The chart data isn't properly accessible to screen readers
- No ARIA landmarks are visible for main navigation areas
Let me run some additional tests to verify these issues:
`─── Puppeteer Evaluate ──────────────────────────`
Let me capture some specific sections for detailed analysis:
`─── Puppeteer Screenshot ──────────────────────────`
Based on my analysis, here's a detailed report with recommendations:
**ACCESSIBILITY AUDIT REPORT**
**1. Structural Issues:**
```html
<!-- Current -->
<div class="recipe-title">Chocolate Cake</div>
<!-- Recommended -->
<h2 class="recipe-title">Chocolate Cake</h2>
```
**2. Interactive Elements:**
```html
<!-- Current -->
<button class="cook-button">COOK CHOCOLATE CAKE</button>
<!-- Recommended -->
<button
class="cook-button"
aria-label="Cook Chocolate Cake recipe"
tabindex="0">
COOK CHOCOLATE CAKE
</button>
```
**3. Image Accessibility:**
```html
<!-- Current -->
<img src="chocolate-cake.jpg">
<!-- Recommended -->
<img
src="chocolate-cake.jpg"
alt="Chocolate cake with dark chocolate frosting"
role="img">
```
**4. Chart Accessibility:**
```html
<!-- Recommended addition -->
<div class="yumminess-chart"
role="region"
aria-label="Monthly yumminess ratings">
<table class="sr-only">
<!-- Add hidden table for screen readers -->
</table>
</div>
```
**5. Color Contrast Fixes:**
```css
/* Current */
.difficulty-beginner {
color: #90EE90;
}
/* Recommended */
.difficulty-beginner {
color: #2E7D32; /* Darker green for better contrast */
}
```
**6. Focus Management:**
```css
/* Add to CSS */
:focus {
outline: 3px solid #2196F3;
outline-offset: 2px;
}
.cook-button:focus {
box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.4);
}
```
**Priority Fixes Needed:**
**1. High Priority:**
- Add proper heading structure using h1-h6 tags
- Implement keyboard focus indicators
- Add alt text to all recipe images
- Fix color contrast for difficulty labels
**2. Medium Priority:**
- Add ARIA labels to interactive elements
- Implement proper list structure for statistics
- Add skip links for keyboard navigation
- Make chart data accessible via screen reader
**3. Low Priority:**
- Enhance focus order
- Add ARIA landmarks
- Implement announcement of dynamic content changes
**Additional Recommendations:**
**1. Add a skip link:**
```html
<a href="#main-content" class="skip-link">
Skip to main content
</a>
```
**2. Implement proper form labels:**
```html
<label for="prep-time">Preparation Time</label>
<input id="prep-time" type="text" value="20 min">
```
**3. Add ARIA live regions for dynamic updates:**
```html
<div aria-live="polite" role="status">
<!-- Dynamic content updates -->
</div>
```
**Testing Tools Recommended:**
1. WAVE Web Accessibility Evaluation Tool
2. axe DevTools
3. Keyboard-only navigation testing
4. Screen reader testing with VoiceOver (Mac)
This audit reveals several critical accessibility issues that should be addressed to ensure WCAG 2.1 compliance. The most urgent concerns are the lack of proper semantic structure, insufficient color contrast, and missing ARIA attributes. Would you like me to provide more specific details about implementing any of these fixes?
:::
### Further Automation with GitHub Extension
You can take this accessibility audit a step further by combining the [GitHub Extension](/docs/tutorials/github-mcp) with the Puppeteer Extension. With this setup, Goose doesnt just find issues and apply fixes, it can also handle the entire Git workflow for you. The GitHub Extension allows Goose to commit changes, create a pull request, and even generate a PR description, so all you have to do is review and merge.
1. Enable the GitHub extension by following the steps in the **[GitHub Extension Tutorial](/docs/tutorials/github-mcp#configuration)**.
:::tip
Ensure your GitHub Personal Access Token has the necessary permissions for repository access and pull request creation when using this combined approach.
:::
2. Ask Goose to:
- Create a new branch
- Commit the accessibility improvements
- Open a pull request
### Goose prompt:
```
Can you create a new branch called 'accessibility-improvements', apply the accessibility fixes you suggested, and open a pull request with these changes?
```
Goose will then:
- ✅ Create a branch: `accessibility-improvements`
- ✅ Apply the recommended accessibility fixes
- ✅ Commit the changes with a descriptive message
- ✅ Open a pull request with a summary of improvements

View File

@@ -1,97 +0,0 @@
---
title: Reddit Extension
description: Add Reddit MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
import CLIExtensionInstructions from '@site/src/components/CLIExtensionInstructions';
<!-- <YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/VIDEO_ID" /> -->
This tutorial covers how to add the [Reddit MCP Server](https://github.com/adhikasp/mcp-reddit) as a Goose extension to fetch trending threads, analyze Reddit post content, and explore subreddit discussions.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&arg=--from&arg=git%2Bhttps%3A%2F%2Fgithub.com%2Fadhikasp%2Fmcp-reddit.git&arg=mcp-reddit&id=reddit&name=Reddit&description=Fetch%20and%20analyze%20Reddit%20content)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx --from git+https://github.com/adhikasp/mcp-reddit.git mcp-reddit
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&arg=--from&arg=git%2Bhttps%3A%2F%2Fgithub.com%2Fadhikasp%2Fmcp-reddit.git&arg=mcp-reddit&id=reddit&name=Reddit&description=Fetch%20and%20analyze%20Reddit%20content)
2. Press <code>Yes</code> to confirm the installation
3. Click <code>Save Configuration</code>
4. Scroll to the top and click <code>Exit</code> from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI (No Env Vars)">
<CLIExtensionInstructions
name="Reddit MCP"
command="uvx --from git+https://github.com/adhikasp/mcp-reddit.git mcp-reddit"
timeout={300}
/>
</TabItem>
</Tabs>
## Example Usage
In this example, Ill use Goose with the Reddit MCP Server to build a custom news feed for AI topics. Goose will pull top AI threads from Reddit and turn them into a scrollable, social media-style feed with images and highlights.
Its like Reddit, but curated just for you.
### Goose Prompt
> goose using the reddit MCP server, create a personalized social feed of the latest AI threads. Include images and format it like a real social media app.
### Goose Output
:::note Desktop
I'll help you create a personalized social media feed using reddits threads and subthreads. Lets first check the content we'll be working with, and then create the web app.
Let's fetch some sample posts from both subreddits to ensure we have the data structure:
────────────── Fetch Reddit Hot Threads ─────────────────
Let's create the web app using javascript:
────────────── Text Editor ─────────────────
I've opened the web app in your default browser. You should now see your personalized social media feed.
The page will automatically fetch the latest posts from r/ProgrammerAIHumor by default, and you can switch to r/AI by clicking the button at the top. Each post is clickable and will take you to the original Reddit thread in a new tab.
Let me know if you'd like to make any adjustments to:
- The color scheme
- The layout
- The refresh rate
- The number of posts shown
Any other features!
Also, if you're having any issues viewing the page, please let me know and I'll help troubleshoot.
:::

View File

@@ -1,495 +0,0 @@
---
title: Repomix Extension
description: Add Repomix MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/69h4LLkIg_E" />
This tutorial covers how to add the [Repomix MCP Server](https://github.com/yamadashy/repomix) as a Goose extension to enable automated repository packing, codebase analysis, architecture summaries, test generation, and code exploration, all while compressing the codebase to minimize token usage and stay within your LLM's context limits.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=repomix&arg=--mcp&id=repomix&name=Repomix&description=Pack%20repositories%20into%20AI-friendly%20formats%20for%20Goose)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y repomix --mcp
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=repomix&arg=--mcp&id=repomix&name=Repomix&description=Pack%20repositories%20into%20AI-friendly%20formats%20for%20Goose)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ repomix
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ repomix
// highlight-start
◆ What command should be run?
│ npx -y repomix --mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ repomix
◇ What command should be run?
│ npx -y repomix --mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ repomix
◇ What command should be run?
│ npx -y repomix --mcp
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ repomix
◇ What command should be run?
│ npx -y repomix --mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added repomix extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, Ill show you how to use Goose with the Repomix Extension to analyze the compressed Axios repository. Goose will focus on the `lib/core/Axios.js` file, explain its role in the architecture, spot missing tests, write new unit tests, and suggest improvements to the testing strategy and code maintainability.
By compressing the entire codebase into an AI-friendly format, Repomix helps Goose stay within token limits while providing detailed, file-specific insights.
### Goose Prompt
> Review the file lib/core/Axios.js from the Axios repository and identify any missing unit tests needed to thoroughly cover its core functions and classes. Explain the role this file plays in the overall Axios architecture, how it integrates with other modules, and how well it is currently tested. Write new unit tests to improve coverage, and recommend improvements to the testing strategy or refactoring opportunities to make the code more maintainable.
### Goose Output
:::note CLI
I'll help analyze the Axios.js core file and its testing coverage. Let's break this down into steps:
1. First, let's fetch and examine the Axios repository using repomix
2. Then analyze the specific file and its related tests
3. Finally provide recommendations and new unit tests
Let's start by getting the repository:
--- Pack Remote Repository ---
Now let's read the core Axios.js file and its related test files:
--- Read Repomix Output ---
Based on my analysis of the Axios codebase, I'll provide you with a comprehensive overview of the project structure and create an improved README. Let me break this down into sections:
**Role in Axios Architecture**
The `Axios.js` file is one of the most critical core components of the Axios library. It serves several key purposes:
1. Request Handling: It contains the main `Axios` class that processes and dispatches HTTP requests
2. Configuration Management: Handles merging of default configs with request-specific configs
3. Interceptor Management: Manages request and response interceptors
4. HTTP Method Convenience: Provides convenience methods for different HTTP verbs (get, post, etc.)
The file integrates with other core modules through:
- `InterceptorManager` for handling request/response interceptors
- `dispatchRequest` for making the actual HTTP requests
- `mergeConfig` for configuration processing
- `buildFullPath` for URL resolution
- `AxiosHeaders` for header management
**Current Test Coverage Analysis**
The current test coverage for Axios.js is fairly good but has some gaps. Looking at the test files:
1. `test/unit/core/Axios.js` - Focuses mainly on error handling cases, particularly un-writable error stacks
2. `test/specs/api.spec.js` - Tests the public API surface
3. `test/specs/interceptors.spec.js` - Tests interceptor functionality
4. `test/specs/instance.spec.js` - Tests instance creation and configuration
**Missing Test Coverage**
1. Error Handling:
```js
// Missing tests for error propagation in request chain
_request(configOrUrl, config) {
// Error handling here needs more coverage
}
```
2. Config Processing:
```js
// Missing edge cases for config validation
request(configOrUrl, config) {
// Config validation edge cases not fully tested
}
```
3. Method Aliases:
```js
// Missing tests for all HTTP method aliases with various parameter combinations
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
// Missing tests for these methods with different data types
});
```
4. Interceptor Chain:
```js
// Missing tests for complex interceptor chains and error scenarios
const chain = [dispatchRequest.bind(this), undefined];
chain.unshift.apply(chain, requestInterceptorChain);
chain.push.apply(chain, responseInterceptorChain);
```
**New Unit Tests**
Here are new unit tests to improve coverage:
```js
describe('core::Axios', function() {
describe('request method', function() {
it('should handle null/undefined config values', function(done) {
const instance = new Axios({});
instance.request({
url: '/foo',
params: null,
data: undefined
}).then(function(response) {
expect(response.config.params).toBeNull();
expect(response.config.data).toBeUndefined();
done();
}).catch(done);
});
it('should properly merge nested config objects', function(done) {
const instance = new Axios({
headers: {
common: {
'X-Common': 'common'
},
get: {
'X-Method': 'get'
}
}
});
instance.request({
method: 'get',
headers: {
'X-Custom': 'custom'
}
}).then(function(response) {
expect(response.config.headers['X-Common']).toBe('common');
expect(response.config.headers['X-Method']).toBe('get');
expect(response.config.headers['X-Custom']).toBe('custom');
done();
}).catch(done);
});
});
describe('interceptor chain', function() {
it('should handle async interceptors correctly', async function() {
const instance = new Axios({});
const order = [];
instance.interceptors.request.use(async function(config) {
await new Promise(resolve => setTimeout(resolve, 100));
order.push(1);
return config;
});
instance.interceptors.request.use(async function(config) {
await new Promise(resolve => setTimeout(resolve, 50));
order.push(2);
return config;
});
instance.interceptors.response.use(async function(response) {
await new Promise(resolve => setTimeout(resolve, 100));
order.push(3);
return response;
});
await instance.request('/foo');
expect(order).toEqual([2, 1, 3]); // Interceptors should execute in correct order
});
it('should handle interceptor errors properly', function(done) {
const instance = new Axios({});
const error = new Error('Interceptor Error');
instance.interceptors.request.use(function() {
throw error;
});
instance.request('/foo').catch(function(e) {
expect(e).toBe(error);
done();
});
});
});
describe('HTTP method aliases', function() {
it('should handle various data types in post/put/patch', function(done) {
const instance = new Axios({});
const testCases = [
{method: 'post', data: {foo: 'bar'}},
{method: 'put', data: 'string data'},
{method: 'patch', data: new URLSearchParams('foo=bar')},
{method: 'post', data: new FormData()},
{method: 'put', data: new Blob(['test'])},
{method: 'patch', data: null}
];
Promise.all(testCases.map(({method, data}) => {
return instance[method]('/foo', data).then(response => {
expect(response.config.data).toEqual(data);
return response;
});
})).then(() => done()).catch(done);
});
});
});
```
**Recommendations for Testing Strategy**
1. Modular Testing:
- Break down tests into smaller, focused units
- Test each HTTP method alias separately
- Create dedicated test suites for config processing, interceptors, and error handling
2. Mock Integration Points:
- Use dependency injection for better isolation
- Mock external dependencies consistently
- Create reusable mock factories
3. Error Handling:
- Add more tests for error cases
- Test error propagation through interceptor chains
- Verify error object properties and inheritance
4. Config Processing:
- Test complex config merging scenarios
- Verify default values are applied correctly
- Test config validation edge cases
5. Interceptor Testing:
- Test complex chains of interceptors
- Verify async interceptor behavior
- Test interceptor error handling
**Refactoring Opportunities**
1. Error Handling:
```js
// Current
_request(configOrUrl, config) {
try {
return this.request(configOrUrl, config);
} catch (err) {
// Error handling
}
}
// Suggested
async _request(configOrUrl, config) {
try {
return await this.request(configOrUrl, config);
} catch (err) {
if (err instanceof AxiosError) {
throw err;
}
throw AxiosError.from(err);
}
}
```
2. Config Processing:
```js
// Current
request(configOrUrl, config) {
// Config processing
}
// Suggested
request(configOrUrl, config) {
const normalizedConfig = this._normalizeConfig(configOrUrl, config);
this._validateConfig(normalizedConfig);
return this._processRequest(normalizedConfig);
}
```
3. Interceptor Chain:
```js
// Current
// Interceptor chain building mixed with request logic
// Suggested
class InterceptorChain {
constructor(request, config) {
this.request = request;
this.config = config;
this.chain = [];
}
addRequestInterceptors(interceptors) {
// Add request interceptors
}
addResponseInterceptors(interceptors) {
// Add response interceptors
}
execute() {
// Execute chain
}
}
```
These improvements would make the code more maintainable and easier to test, while also improving error handling and separation of concerns.
The current test coverage is good but could be improved in these specific areas to ensure more robust functionality. The suggested new tests and refactoring opportunities would help catch edge cases and make the code more maintainable.
:::

View File

@@ -1,199 +0,0 @@
---
title: Selenium Extension
description: Add Selenium MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/PLqPOEeGPLc" />
This tutorial covers how to add the [Selenium MCP Server](https://github.com/angiejones/mcp-selenium) as a Goose extension to automate browser interactions such as navigating web pages and completing forms.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40angiejones%2Fmcp-selenium&id=selenium-mcp&name=Selenium%20MCP&description=automates%20browser%20interactions)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y @angiejones/mcp-selenium
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40angiejones%2Fmcp-selenium&id=selenium-mcp&name=Selenium%20MCP&description=automates%20browser%20interactions)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ Selenium
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Selenium
// highlight-start
◆ What command should be run?
│ npx -y @angiejones/mcp-selenium
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Selenium
◇ What command should be run?
│ npx -y @angiejones/mcp-selenium
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Selenium
◇ What command should be run?
│ npx -y @angiejones/mcp-selenium
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ Selenium
◇ What command should be run?
│ npx -y @angiejones/mcp-selenium
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added Selenium extension
```
</TabItem>
</Tabs>
## Example Usage
Let's use Goose to build a test automation project from scratch! We'll use the Selenium MCP to automate filling out a web form, then have Goose generate a Selenium project with the code so that we can run these tests again when needed.
### Goose Prompt
> Use selenium to go to the heroku formy site and fill out the form page with generic data. then can you turn what you've done into an automation script for me? I would like it in Java. Also use the Page Object Model pattern.
### Goose Output
<iframe class="aspect-ratio" src="https://www.youtube.com/embed/mRV0N8hcgYA?start=28&end=152" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

View File

@@ -1,249 +0,0 @@
---
title: Speech Extension
description: Add Speech MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://youtube.com/embed/rurAp_WzOiY" />
This tutorial covers how to add the [Speech MCP Server](https://github.com/Kvadratni/speech-mcp) as a Goose extension to enable real-time voice interaction, audio/video transcription, text-to-speech conversion, and multi-speaker audio generation.
:::info Requirement
[PortAudio](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/scripts/readme-gen/templates/install_portaudio.tmpl.rst#install-portaudio) is required for PyAudio to capture audio from your microphone
:::
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=uvx&&arg=-p&arg=3.10.14&arg=speech-mcp@latest&id=speech_mcp&name=Speech%20Interface&description=Voice%20interaction%20with%20audio%20visualization%20for%20Goose)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx -p 3.10.14 speech-mcp@latest
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
Before adding this extension, make sure [PortAudio](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/scripts/readme-gen/templates/install_portaudio.tmpl.rst#install-portaudio) is installed on your system. **PortAudio is required** for PyAudio to capture audio from your microphone.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=uvx&&arg=-p&arg=3.10.14&arg=speech-mcp@latest&id=speech_mcp&name=Speech%20Interface&description=Voice%20interaction%20with%20audio%20visualization%20for%20Goose)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ speech
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ speech
// highlight-start
◆ What command should be run?
│ uvx -p 3.10.14 speech-mcp@latest
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ speech
◇ What command should be run?
│ uvx -p 3.10.14 speech-mcp@latest
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ speech
◇ What command should be run?
│ uvx -p 3.10.14 speech-mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Choose No when asked to add environment variables
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ speech
◇ What command should be run?
│ uvx -p 3.10.14 speech-mcp@latest
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added speech extension
```
</TabItem>
</Tabs>
## Example Usage
In this example, you'll see how to use Goose with the Speech MCP Server Extension to turn voice commands into code. By speaking directly to Goose, you can launch the speech interface, give a spoken prompt, and have Goose generate and open a webpage based on your request.
This allows you to build with Goose hands-free, making development more accessible and interactive.
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Open a new session in Goose Desktop
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Open a terminal and start a new Goose session:
```sh
goose session
```
</TabItem>
</Tabs>
### Goose Prompt
Here are some things you can say to activate the speech interface:
- “Goose, I dont feel like typing today.”
- “Lets talk using voice.”
- “Can we have a voice conversation?”
- “Id like to speak instead of typing.”
- “Goose, launch the speech UI.”
```
Goose I don't feel like talking today
```
### Goose Output
```
I understand! In that case, I can help you use voice commands instead. I'll launch the speech interface so you can speak your requests rather than type them
---- Launch Speech UI ----
```
### Goose Speech 🎙️
**Goose:**
>_I've launched the speech interface. You can now speak your requests instead of typing. Just speak after you hear my voice and see the microphone activate. What would you like help with?_
**Max:**
>_Goose, lets create a simple page with the word 'vibes' on it and maybe change colors and make it move around the page and then open this page in the browser once you're done_
<div style={{ width: "100%", height: 0, position: "relative", paddingBottom: "56.25%" }}>
<iframe
src="https://www.youtube.com/embed/vbD8IHwx-OY"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
title="YouTube video"
style={{ position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }}
></iframe>
</div>

View File

@@ -1,450 +0,0 @@
---
title: Square MCP Extension
description: Add the Square API as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<details>
<summary> 🎥 Square MCP Server Video Walkthrough</summary>
<iframe
class="aspect-ratio"
src="https://www.youtube.com/embed/y6pklrzhzNg"
title="Run your Business with AI | Square MCP Server"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
</details>
This tutorial will get you started with the Square MCP server to enable interactive and automated work for your Square seller account. The Square MCP server is an open source project that allows you to interact with the Square API using Goose.
Square offers two versions of the MCP server:
1. **Remote MCP server** hosted by Square, which uses OAuth for authentication and allows fine-grained permissions on API usage.
2. **Local MCP server** that you can run on your own machine, which uses an access token for authentication and allows full API access.
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run installation commands, which use `npx`.
:::
<Tabs groupId="remote-or-local">
<TabItem value="remote" label="Square Remote MCP" default>
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](https://mcp.squareup.com/goose)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx mcp-remote https://mcp.squareup.com/sse
```
</TabItem>
</Tabs>
:::
## Configuration
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](https://mcp.squareup.com/goose)
2. Goose will open and ask you to confirm installation.
3. Goose should open a browser tab to an OAuth permissions page. Double-check which permissions you want to allow, and click 'Grant Access'.
4. It will ask you to login or reauthenticate to Square, and may ask you to confirm the permissions you want to allow.
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
1. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
│ ○ Command-line Extension (Run a local command or script)
// highlight-start
│ ● Remote Extension
// highlight-end
```
1. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
// highlight-start
◆ What would you like to call this extension?
│ square-mcp-remote
// highlight-end
```
1. Enter the SSE URI
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ square-mcp-remote
// highlight-start
◆ What is the SSE endpoint URI?
│ https://mcp.squareup.com/sse
// highlight-end
```
1. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ square-mcp-remote
◆ What is the SSE endpoint URI?
│ https://mcp.squareup.com/sse
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
1. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ square-mcp-remote
◆ What is the SSE endpoint URI?
│ https://mcp.squareup.com/sse
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
1. Obtain a [Square Access Token](https://developer.squareup.com/apps) and paste it in.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Remote Extension
◇ What would you like to call this extension?
│ square-mcp-remote
◆ What is the SSE endpoint URI?
│ https://mcp.squareup.com/sse
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added square-mcp-remote extension
```
</TabItem>
</Tabs>
</TabItem>
<TabItem value="local" label="Square Local MCP">
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=square-mcp-server%20start&id=square-mcp&name=Square%20MCP%20Server&description=Square%20MCP%20Server&env=ACCESS_TOKEN%3DYour%20Access%20Token&env=SANDBOX%3Dtrue)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx square-mcp-server start
```
</TabItem>
</Tabs>
**Environment Variables**
```
ACCESS_TOKEN: <YOUR_API_KEY>
SANDBOX: <true/false>
PRODUCTION: <true/false>
```
Note that you'll use `SANDBOX` -or- `PRODUCTION`, not both, and your `ACCESS_TOKEN` will either be a sandbox or production token, depending on which environment you choose.
:::
## Configuration
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=square-mcp-server%20start&id=square-mcp&name=Square%20MCP%20Server&description=Square%20MCP%20Server&env=ACCESS_TOKEN%3DYour%20Access%20Token&env=SANDBOX%3Dtrue)
2. Press `Yes` to confirm the installation
3. Get your [Square Access Token](https://developer.squareup.com/apps) and paste it in
4. Keep `SANDBOX` as the environment variable, or change to `PRODUCTION`, and set its value to `true`
5. Click `Save Configuration`
6. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
1. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
1. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ square-mcp
// highlight-end
```
1. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ square-mcp
// highlight-start
◆ What command should be run?
│ npx square-mcp-server start
// highlight-end
```
1. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ square-mcp
◇ What command should be run?
│ npx square-mcp-server start
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
1. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ square-mcp
◇ What command should be run?
│ npx square-mcp-server start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
1. Obtain a [Square Access Token](https://developer.squareup.com/apps) and paste it in.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ square-mcp
◇ What command should be run?
│ npx square-mcp-server start
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ ACCESS_TOKEN
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ Yes
◇ Environment variable name:
│ SANDBOX
◇ Environment variable value:
│ true
// highlight-end
└ Added square-mcp extension
```
:::info
Change the `SANDBOX` key to `PRODUCTION` if using a production token
:::
</TabItem>
</Tabs>
</TabItem>
</Tabs>
## Example Usage
The Square MCP server allows you to interact with Square's connect API with an extensive [service catalog](https://github.com/square/square-mcp-server?tab=readme-ov-file#service-catalog) to access the Square API ecosystem.
#### Goose Prompt
```
( O)> Find my food menu from the following image and import these into my Square seller account. "my-burger-menu.png"
```
[Here's the menu image used in the demo.](../assets/guides/square-mcp-goosin-menu.png)
#### Goose Output
```
I'll help you import these menu items into your Square catalog. I'll use the Square API to create catalog items for each burger. Let me break this down into steps:
1. First, I'll check the catalog API service info and types
2. Then I'll create catalog items for each burger
Now let me check the type info for creating catalog objects
Now I'll start creating catalog items for each burger in your menu. I'll create them one by one using the catalog API. Let me process each burger:
(output truncated)
I've successfully created all the burger items from your menu in your Square catalog. Each burger has been added with:
- The exact name from your menu
- The full description
- The correct price
- A standard variation for ordering
Here's a summary of what was created:
- The Classic - $10.00
- Cheeseburger - $11.00
- Primetime Burger - $12.00
- Double Bacon - $14.00
- Texas Meatlover - $12.50
- Buffalo Burger - $12.00
- The Atomic - $12.50
- Little Bird - $11.00
- Mushroom Burger - $10.00
All items are now available in your Square catalog and ready for use in your point of sale system. Each burger includes its complete description and comes with a "Regular" variation at the specified price. The items are set as both sellable and stockable by default, and they're available at all locations.
```

View File

@@ -1,251 +0,0 @@
---
title: Tavily Web Search Extension
description: Add Tavily MCP Server as a Goose Extension
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://youtube.com/embed/mxS2G9afGxE" />
This tutorial covers how to add the [Tavily Web Search MCP Server](https://github.com/tavily-ai/tavily-mcp) as a Goose extension to enable AI-powered web search functionality.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=tavily-mcp&id=tavily&name=Tavily%20Web%20Search&description=Search%20the%20web%20with%20Tavily%20MCP&env=TAVILY_API_KEY%3DTavily%20API%20Key)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
npx -y tavily-mcp
```
</TabItem>
</Tabs>
**Environment Variable**
```
TAVILY_API_KEY: <YOUR_API_KEY>
```
:::
## Configuration
:::info
Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on your system to run this command, as it uses `uvx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=tavily-mcp&id=tavily&name=Tavily%20Web%20Search&description=Search%20the%20web%20with%20Tavily%20MCP&env=TAVILY_API_KEY%3DTavily%20API%20Key)
2. Press `Yes` to confirm the installation
3. Obtain a [TAVILY_API_KEY](https://tavily.com/) and paste it in
4. Click `Save Configuration`
5. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ tavily
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ tavily
// highlight-start
◆ What command should be run?
│ npx -y tavily-mcp
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ tavily
◇ What command should be run?
│ npx -y tavily-mcp
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ tavily
◇ What command should be run?
│ npx -y tavily-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. Obtain a [Tavily API Key](https://tavily.com/) and paste it in.
:::info
You can get your API key by signing up at [tavily.com](https://app.tavily.com/) and navigating to your account settings.
:::
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ tavily
◇ What command should be run?
│ npx -y tavily-mcp
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No
// highlight-start
◆ Would you like to add environment variables?
│ Yes
◇ Environment variable name:
│ TAVILY_API_KEY
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
◇ Add another environment variable?
│ No
// highlight-end
└ Added tavily extension
```
</TabItem>
</Tabs>
## Example Usage
The Tavily MCP server enables AI-powered web search functionality in your Goose interactions. When you obtain your API key, you'll have access to Tavily's advanced search capabilities including:
1. Real-time web search
2. Structured data extraction
3. Content analysis
4. Topic-specific search
### Goose Prompt
```
Search for recent news about artificial intelligence breakthroughs in medicine and summarize the key findings.
```
### Goose Output
```
I'll use the Tavily news search tool to find recent news about AI breakthroughs in medicine.
─── tavily_news_search | tavily ──────────────────────────
max_results: 5
query: ...
Let me summarize the key findings from the recent news about AI in medicine:
1. Personalized AI-Driven Healthcare:
- Development of AI systems that act as "personal doctors" that work alongside human clinicians rather than replacing them
- Focus on augmenting clinical capabilities while maintaining human oversight
2. Breakthrough in Medical Imaging:
- A significant advancement in CT scan analysis has been reported in Nature
- Development of a "Unified total-body CT image" (Uni-CT) algorithm that:
- Automatically generates single series of total-body CT images
- Concatenates multiple images of segmented organs using organ-specific window settings
- Reduces diagnosis time by 35% without compromising accuracy
- Improves efficiency in trauma cases
3. Future Trends:
- Movement toward democratized AI in healthcare, potentially reducing the gap between large and small healthcare providers
- Development of hyper-personalized medical experiences powered by AI
- Integration of AI systems that can perform human-like reasoning in medical contexts
The most concrete breakthrough appears to be in medical imaging, with the Uni-CT algorithm showing promising results in improving both the speed and accuracy of trauma diagnosis. This represents a practical application of AI that could have immediate benefits in emergency medicine.
Would you like me to search for more specific information about any of these developments or explore other areas of AI in medicine?
```
:::tip
You can adjust the [search parameters](https://github.com/tavily-ai/tavily-mcp#tavily-search-examples) for different types of queries and depths of information. The extension supports both quick searches and comprehensive research.
:::

View File

@@ -1,187 +0,0 @@
---
title: Tutorial Extension
description: Learn how to use Goose's built-in Tutorial extension for guided learning
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
The Tutorial extension is a built-in feature of Goose that provides interactive, step-by-step guidance for learning various aspects of Goose and its capabilities. It's designed to help users get comfortable with Goose's features through hands-on practice.
The Tutorial extension serves as an interactive learning tool that:
- Provides structured, step-by-step tutorials
- Allows hands-on practice with Goose features
- Offers immediate feedback and guidance
## Configuration
1. Ensure the Tutorial extension is enabled:
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. Click `...` in the upper right corner
2. Click `Advanced Settings`
3. Under `Extensions`, toggle `Tutorial` to on.
</TabItem>
<TabItem value="cli" label="Goose CLI">
```sh
goose configure
```
2. Choose to add a `Built-in Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
// highlight-start
│ ● Built-in Extension (Use an extension that comes with Goose)
// highlight-end
│ ○ Command-line Extension
│ ○ Remote Extension
```
3. Select the `Tutorial` extension
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ ○ Developer Tools
│ ○ Computer Controller
// highlight-start
│ ● Tutorial
// highlight-end
│ ○ Memory
| ○ JetBrains
```
4. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Built-in Extension
◇ Which built-in extension would you like to enable?
│ Tutorial
// highlight-start
◆ Please set the timeout for this tool (in secs):
300
// highlight-end
└ Enabled Tutorials extension
```
</TabItem>
</Tabs>
## Available Tutorials
Currently, the following tutorials are available:
- **build-mcp-extension**: Learn how to build an extension using the Model Context Protocol (MCP)
- **first-game**: Create your first game with Goose
More tutorials are being added regularly to cover additional features and use cases.
## Using the Tutorial Extension
### Starting a Tutorial
There are two main ways to interact with tutorials:
1. **Ask Goose directly**: You can simply ask about a topic you're interested in, and Goose will suggest relevant tutorials.
```
( O)> I'd like to learn how to build an extension for Goose
```
2. **Request a specific tutorial**: You can directly request a tutorial by name.
```
( O)> Can you walk me through the first-game tutorial?
```
### During the Tutorial
While going through a tutorial:
1. Goose will guide you step-by-step through the process
2. You'll receive clear instructions before any actions are taken
3. You can ask questions at any time for clarification
4. You can take breaks and resume later
### Best Practices
- **Take your time**: Don't rush through the tutorials. Make sure you understand each step before moving on.
- **Ask questions**: If something isn't clear, ask Goose to explain it further.
- **Experiment**: Feel free to try variations of what you're learning.
- **Take notes**: Document any interesting findings or techniques you learn.
## Example Usage
### Starting a Tutorial Session
Here's an example of how to start learning about building extensions:
### Goose Prompt
```
I'd like to learn how to build an extension for Goose
```
### Goose Output
```
I'll help you learn about building extensions! The "build-mcp-extension" tutorial would be perfect for this. Let me load it and guide you through it.
─── load_tutorial | tutorial ──────────────────────────
name: build-mcp-extension
Before we dive into building your extension, I need to understand a few things to better guide you:
1. Which SDK would you prefer to use? We have three options:
- Python (beginner-friendly, great for prototyping)
- TypeScript (great for web-based tools)
- Kotlin (robust, type-safe, good for complex applications)
2. What type of extension would you like to build? For example:
- A tool that performs specific actions
- A resource that provides data to the LLM
- Or do you have a specific idea in mind?
Let me know your preferences, and I'll help you get started with the appropriate setup and implementation!
For reference, here's what we'll cover:
1. Setting up your development environment
2. Creating the basic MCP server
3. Implementing your specific functionality
4. Testing and debugging
Which SDK would you like to use to get started?
```
## Next Steps
After completing tutorials, you can:
- Apply learned concepts to your own projects
- Contribute to the Goose community by sharing your experiences
- Suggest new tutorial topics that would be helpful for others
### Need Further Help?
If you have questions, run into issues, or just need to brainstorm ideas join the [Discord Community][discord]!
[discord]: https://discord.gg/block-opensource

View File

@@ -1,85 +0,0 @@
---
title: VS Code Extension
description: Use the Goose VS Code Extension to connect Goose to your editor
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
This tutorial covers how to install and use the [Goose VS Code Extension](https://marketplace.visualstudio.com/items?itemName=block.vscode-goose) so you can use Goose interactively for file operations and development workflow management from within VS Code.
:::info Prerequisite
- [VS Code](https://code.visualstudio.com/) version 1.95.0 or higher is required
- [Goose Desktop](https://block.github.io/goose/) must be installed and running
:::
## Configuration
<Tabs>
<TabItem value="desktop" label="Goose Desktop">
1. Open VS Code
2. Open the Extensions view in VS Code:
- Windows/Linux: `Ctrl+Shift+X`
- macOS: `Cmd+Shift+X`
- Or use: View → Extensions
3. Search for `VS Code Goose`
4. Click Install on [VS Code Goose](https://marketplace.visualstudio.com/items?itemName=block.vscode-goose) by Block
5. Restart VS Code if prompted
6. Open the Goose: Chat side panel to start a new conversation or view conversation history
</TabItem>
<TabItem value="cli" label="Goose CLI">
Not available via CLI.
</TabItem>
</Tabs>
:::tip
You can ask Goose about a particular file or code block by:
- Selecting the code you want to discuss
- Right-clicking and choosing "Ask Goose about this code"
- The code will appear as a reference chip above the chat input
:::
## Example Usage
The Goose VS Code Extension connects directly to your editor, letting you manage files, projects, and workflows with AI. It includes the following features:
- Interactive chat UI
- Access to Goose's AI capabilities directly within VS Code
- Unified session switching
- Code referencing with visual chips in the chat UI
- Quick actions for common coding tasks
- Clipboard tools to copy code snippets/responses for easy sharing
### Goose Prompt
```
Update the contributing guide at /goose/CONTRIBUTING.md with instructions on how to start docusaurus dev server
```
### Goose Output
```
I'll help you update the CONTRIBUTING.md file with instructions for starting the Docusaurus dev server. First, let me check the current content of the file.
─── developer__text_editor | view ──────────────────────────
I'll now update the CONTRIBUTING.md file to include instructions for starting the Docusaurus dev server. I'll add this information in a new section under the Node section.
─── developer__text_editor | str_replace ──────────────────────────
I've successfully updated the CONTRIBUTING.md file to include instructions for starting the Docusaurus dev server. I added a new "Documentation" section right after the Node section, which provides clear step-by-step instructions for:
Navigating to the docs directory
Installing dependencies
Starting the development server
I also included helpful information about the hot-reloading feature and the local server URL. The formatting is consistent with the rest of the document, using proper markdown syntax for code blocks and headers.
Is there anything else you'd like me to add or modify in the contributing guide?
```

View File

@@ -1,204 +0,0 @@
---
title: YouTube Transcript Extension
description: Add YouTube Transcript MCP Server as a Goose Extension for accessing YouTube video transcripts
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import YouTubeShortEmbed from '@site/src/components/YouTubeShortEmbed';
<YouTubeShortEmbed videoUrl="https://www.youtube.com/embed/N38u7hZqZJg" />
This tutorial covers how to add the [YouTube Transcript MCP Server](https://github.com/jkawamoto/mcp-youtube-transcript) as a Goose extension to enable fetching and working with YouTube video transcripts.
:::tip TLDR
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
[Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40jkawamoto%2Fmcp-youtube-transcript&id=youtube-transcript&name=YouTube%20Transcript&description=Access%20YouTube%20video%20transcripts)
</TabItem>
<TabItem value="cli" label="Goose CLI">
**Command**
```sh
uvx --from git+https://github.com/jkawamoto/mcp-youtube-transcript mcp-youtube-transcript
```
</TabItem>
</Tabs>
:::
## Configuration
:::info
Note that you'll need [Node.js](https://nodejs.org/) installed on your system to run this command, as it uses `npx`.
:::
<Tabs groupId="interface">
<TabItem value="ui" label="Goose Desktop" default>
1. [Launch the installer](goose://extension?cmd=npx&arg=-y&arg=%40jkawamoto%2Fmcp-youtube-transcript&id=youtube-transcript&name=YouTube%20Transcript&description=Access%20YouTube%20video%20transcripts)
2. Press `Yes` to confirm the installation
3. Click `Save Configuration`
4. Scroll to the top and click `Exit` from the upper left corner
</TabItem>
<TabItem value="cli" label="Goose CLI">
1. Run the `configure` command:
```sh
goose configure
```
2. Choose to add a `Command-line Extension`
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◆ What type of extension would you like to add?
│ ○ Built-in Extension
// highlight-start
│ ● Command-line Extension (Run a local command or script)
// highlight-end
│ ○ Remote Extension
```
3. Give your extension a name
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
// highlight-start
◆ What would you like to call this extension?
│ youtube-transcript
// highlight-end
```
4. Enter the command
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ youtube-transcript
// highlight-start
◆ What command should be run?
│ npx -y @jkawamoto/mcp-youtube-transcript
// highlight-end
```
5. Enter the number of seconds Goose should wait for actions to complete before timing out. Default is 300s
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ youtube-transcript
◇ What command should be run?
│ npx -y @jkawamoto/mcp-youtube-transcript
// highlight-start
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-end
```
6. Choose to add a description. If you select "Yes" here, you will be prompted to enter a description for the extension.
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ knowledge graph memory
◇ What command should be run?
│ npx -y @modelcontextprotocol/server-memory
◆ Please set the timeout for this tool (in secs):
│ 300
// highlight-start
◇ Would you like to add a description?
│ No
// highlight-end
```
7. No environment variables are required for this extension
```sh
┌ goose-configure
◇ What would you like to configure?
│ Add Extension (Connect to a new extension)
◇ What type of extension would you like to add?
│ Command-line Extension
◇ What would you like to call this extension?
│ youtube-transcript
◇ What command should be run?
│ npx -y @jkawamoto/mcp-youtube-transcript
◇ Please set the timeout for this tool (in secs):
│ 300
◇ Would you like to add a description?
│ No // highlight-start
◆ Would you like to add environment variables?
│ No
// highlight-end
└ Added youtube-transcript extension
```
</TabItem>
</Tabs>
## Example Usage
The YouTube Transcript extension allows you to fetch and work with transcripts from YouTube videos. You'll need the video ID from the YouTube URL you want to get the transcript for.
### Goose Prompt
```
Get me the transcript for this YouTube video: https://www.youtube.com/watch?v=dQw4w9WgXcQ
```
### Goose Output
:::note CLI
I'll help you get the transcript for that video. The video ID is "dQw4w9WgXcQ". Let me fetch the transcript for you.
Here's the transcript:
[Transcript content would appear here with timestamps and text]
I've retrieved the transcript for Rick Astley's "Never Gonna Give You Up" music video. The transcript shows the lyrics of the song, though there are some minor transcription errors due to the automated nature of the system. The transcript includes the iconic chorus and verses of this famous 1987 song, which has become one of the most well-known internet memes, often used for "rickrolling."
Would you like me to help you with anything else regarding the video or its transcript?
:::