docs: remove SSE transport and rename to Streamable HTTP (#6319)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -153,8 +153,7 @@ See available servers in the **[MCP Server Directory](https://www.pulsemcp.com/s
|
|||||||
3. Choose the type of extension you'd like to add:
|
3. Choose the type of extension you'd like to add:
|
||||||
- `Built-In Extension`: Use an extension that comes pre-installed with goose.
|
- `Built-In Extension`: Use an extension that comes pre-installed with goose.
|
||||||
- `Command-Line Extension`: Add a local command or script to run as an extension.
|
- `Command-Line Extension`: Add a local command or script to run as an extension.
|
||||||
- `Remote Extension (SSE)`: Connect to a remote system via SSE (Server-Sent Events).
|
- `Remote Extension (Streamable HTTP)`: Connect to a remote system via Streamable HTTP
|
||||||
- `Remote Extension (Streaming HTTP)`: Connect to a remote system via Streaming HTTP
|
|
||||||
|
|
||||||
4. Follow the prompts based on the type of extension you selected.
|
4. Follow the prompts based on the type of extension you selected.
|
||||||
|
|
||||||
@@ -284,32 +283,13 @@ goose://extension?cmd=npx&arg=-y&arg=%40modelcontextprotocol/server-github&timeo
|
|||||||
|
|
||||||
Note that each parameter to the `npx` command is passed as a separate `arg` parameter in the deeplink.
|
Note that each parameter to the `npx` command is passed as a separate `arg` parameter in the deeplink.
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="sse" label="Server-Sent Events">
|
<TabItem value="streamable_http" label="Streamable HTTP">
|
||||||
```
|
|
||||||
goose://extension?url=<remote-sse-url>&id=<id>&name=<name>&description=<description>
|
|
||||||
```
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
- `url`: The URL of the remote SSE server
|
|
||||||
- `timeout`: Maximum time (in seconds) to wait for extension responses
|
|
||||||
- `id`: Unique identifier for the extension
|
|
||||||
- `name`: Display name for the extension
|
|
||||||
- `description`: Brief description of the extension's functionality
|
|
||||||
|
|
||||||
For example, a deeplink for a URL like `http://localhost:8080/sse` would look like this when URL-encoded:
|
|
||||||
|
|
||||||
```
|
|
||||||
goose://extension?url=http%3A%2F%2Flocalhost%3A8080%2Fsse&timeout=<timeout>&id=<id>&name=<name>&description=<description>>
|
|
||||||
```
|
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
<TabItem value="streamable_http" label="Streaming HTTP">
|
|
||||||
```
|
```
|
||||||
goose://extension?url=<remote-streamable-http-url>&type=streamable_http&id=<id>&name=<n>&description=<description>
|
goose://extension?url=<remote-streamable-http-url>&type=streamable_http&id=<id>&name=<n>&description=<description>
|
||||||
```
|
```
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
- `url`: The URL of the remote Streaming HTTP server
|
- `url`: The URL of the remote Streamable HTTP server
|
||||||
- `type`: Must be set to `streamable_http` to specify the protocol type
|
- `type`: Must be set to `streamable_http` to specify the protocol type
|
||||||
- `timeout`: Maximum time (in seconds) to wait for extension responses
|
- `timeout`: Maximum time (in seconds) to wait for extension responses
|
||||||
- `id`: Unique identifier for the extension
|
- `id`: Unique identifier for the extension
|
||||||
@@ -636,29 +616,15 @@ Note that you'll need [Node.js](https://nodejs.org/) installed on your system to
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
|
|
||||||
### Remote Extensions over SSE
|
### Remote Extensions over Streamable HTTP
|
||||||
|
|
||||||
To enable a remote extension over SSE while starting a session, run the following command:
|
To enable a remote extension over Streamable HTTP while starting a session, run the following command:
|
||||||
|
|
||||||
```bash
|
|
||||||
goose session --with-remote-extension "{extension URL}" --with-remote-extension "{another extension URL}"
|
|
||||||
```
|
|
||||||
|
|
||||||
For example, to start a session with a remote extension over SSE running on localhost on port 8080, you'd run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
goose session --with-remote-extension "http://localhost:8080/sse"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Remote Extensions over Streaming HTTP
|
|
||||||
|
|
||||||
To enable a remote extension over Streaming HTTP while starting a session, run the following command:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
goose session --with-streamable-http-extension "{extension URL}" --with-streamable-http-extension "{another extension URL}"
|
goose session --with-streamable-http-extension "{extension URL}" --with-streamable-http-extension "{another extension URL}"
|
||||||
```
|
```
|
||||||
|
|
||||||
For example, to start a session with a Streaming HTTP extension, you'd run:
|
For example, to start a session with a Streamable HTTP extension, you'd run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
goose session --with-streamable-http-extension "https://example.com/streamable"
|
goose session --with-streamable-http-extension "https://example.com/streamable"
|
||||||
|
|||||||
@@ -110,8 +110,7 @@ Start or resume interactive chat sessions.
|
|||||||
|
|
||||||
**Extension Options:**
|
**Extension Options:**
|
||||||
- **`--with-extension <command>`**: Add stdio extensions
|
- **`--with-extension <command>`**: Add stdio extensions
|
||||||
- **`--with-remote-extension <url>`**: Add remote extensions over SSE
|
- **`--with-streamable-http-extension <url>`**: Add remote extensions over Streamable HTTP
|
||||||
- **`--with-streamable-http-extension <url>`**: Add remote extensions over Streaming HTTP
|
|
||||||
- **`--with-builtin <id>`**: Enable built-in extensions (e.g., 'developer', 'computercontroller')
|
- **`--with-builtin <id>`**: Enable built-in extensions (e.g., 'developer', 'computercontroller')
|
||||||
|
|
||||||
**Usage:**
|
**Usage:**
|
||||||
@@ -128,13 +127,12 @@ goose session --resume --path ./session.jsonl # legacy session storage
|
|||||||
# Start with extensions
|
# Start with extensions
|
||||||
goose session --with-extension "npx -y @modelcontextprotocol/server-memory"
|
goose session --with-extension "npx -y @modelcontextprotocol/server-memory"
|
||||||
goose session --with-builtin developer
|
goose session --with-builtin developer
|
||||||
goose session --with-remote-extension "http://localhost:8080/sse"
|
goose session --with-streamable-http-extension "http://localhost:8080/mcp"
|
||||||
|
|
||||||
# Advanced: Mix multiple extension types
|
# Advanced: Mix multiple extension types
|
||||||
goose session \
|
goose session \
|
||||||
--with-extension "echo hello" \
|
--with-extension "echo hello" \
|
||||||
--with-remote-extension "http://sse.example.com/sse" \
|
--with-streamable-http-extension "http://localhost:8080/mcp" \
|
||||||
--with-streamable-http-extension "http://http.example.com" \
|
|
||||||
--with-builtin "developer"
|
--with-builtin "developer"
|
||||||
|
|
||||||
# Control session behavior
|
# Control session behavior
|
||||||
@@ -303,8 +301,7 @@ Execute commands from an instruction file or stdin. Check out the [full guide](/
|
|||||||
|
|
||||||
**Extension Options:**
|
**Extension Options:**
|
||||||
- **`--with-extension <COMMAND>`**: Add stdio extensions (can be used multiple times)
|
- **`--with-extension <COMMAND>`**: Add stdio extensions (can be used multiple times)
|
||||||
- **`--with-remote-extension <URL>`**: Add remote extensions over SSE (can be used multiple times)
|
- **`--with-streamable-http-extension <URL>`**: Add remote extensions over Streamable HTTP (can be used multiple times)
|
||||||
- **`--with-streamable-http-extension <URL>`**: Add remote extensions over Streaming HTTP (can be used multiple times)
|
|
||||||
- **`--with-builtin <name>`**: Add builtin extensions by name (e.g., 'developer' or multiple: 'developer,github')
|
- **`--with-builtin <name>`**: Add builtin extensions by name (e.g., 'developer' or multiple: 'developer,github')
|
||||||
|
|
||||||
**Control Options:**
|
**Control Options:**
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ The `extensions` field allows you to specify which Model Context Protocol (MCP)
|
|||||||
#### Extension Types
|
#### Extension Types
|
||||||
|
|
||||||
- **`stdio`**: Standard I/O client with command and arguments
|
- **`stdio`**: Standard I/O client with command and arguments
|
||||||
- **`sse`**: Server-sent events client with a URI endpoint
|
|
||||||
- **`builtin`**: Built-in extension that is part of the bundled goose MCP server
|
- **`builtin`**: Built-in extension that is part of the bundled goose MCP server
|
||||||
- **`platform`**: Platform extensions that run in the agent process
|
- **`platform`**: Platform extensions that run in the agent process
|
||||||
- **`streamable_http`**: Streamable HTTP client with URI endpoint
|
- **`streamable_http`**: Streamable HTTP client with URI endpoint
|
||||||
|
|||||||
@@ -120,12 +120,6 @@ goose run --with-builtin "developer,computercontroller" -t "your instructions"
|
|||||||
goose run --with-extension "ENV1=value1 custom-extension-args" -t "your instructions"
|
goose run --with-extension "ENV1=value1 custom-extension-args" -t "your instructions"
|
||||||
```
|
```
|
||||||
|
|
||||||
- Using remote SSE extensions
|
|
||||||
|
|
||||||
```bash
|
|
||||||
goose run --with-remote-extension "url" -t "your instructions"
|
|
||||||
```
|
|
||||||
|
|
||||||
- Using streamable HTTP extensions
|
- Using streamable HTTP extensions
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -70,13 +70,13 @@ Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on
|
|||||||
apiKeyLinkText="Service Access Token"
|
apiKeyLinkText="Service Access Token"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- For external SSE or HTTP MCP servers -->
|
<!-- For HTTP MCP servers -->
|
||||||
<GooseDesktopInstaller
|
<GooseDesktopInstaller
|
||||||
extensionId="{extension_id}"
|
extensionId="{extension_id}"
|
||||||
extensionName="{Extension Name}"
|
extensionName="{Extension Name}"
|
||||||
description="{Extension description}"
|
description="{Extension description}"
|
||||||
type="sse" // or "http"
|
type="http"
|
||||||
url="https://example-server.com/endpoint"
|
url="https://example-server.com/mcp"
|
||||||
envVars={[ // also used for http request headers
|
envVars={[ // also used for http request headers
|
||||||
{ name: "SOME_KEY", label: "Description or placeholder value" }
|
{ name: "SOME_KEY", label: "Description or placeholder value" }
|
||||||
]}
|
]}
|
||||||
@@ -107,12 +107,12 @@ Note that you'll need [uv](https://docs.astral.sh/uv/#installation) installed on
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- For external SSE or HTTP MCP servers -->
|
<!-- For HTTP MCP servers -->
|
||||||
<CLIExtensionInstructions
|
<CLIExtensionInstructions
|
||||||
name="{Extension Name}"
|
name="{Extension Name}"
|
||||||
description="{Extension description}"
|
description="{Extension description}"
|
||||||
type="sse" // or "http"
|
type="http"
|
||||||
url="https://example-server.com/endpoint"
|
url="https://example-server.com/mcp"
|
||||||
timeout={300}
|
timeout={300}
|
||||||
envVars={[ // also used for http request headers
|
envVars={[ // also used for http request headers
|
||||||
{ key: "API_KEY", value: "▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪" }
|
{ key: "API_KEY", value: "▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪" }
|
||||||
|
|||||||
@@ -69,9 +69,8 @@ Note that you'll need [Node.js](https://nodejs.org/) installed on your system to
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ Cloudflare provides multiple specialized MCP servers for different aspects of th
|
|||||||
|
|
||||||
<Tabs groupId="interface">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fobservability.mcp.cloudflare.com%2Fsse&id=cloudflare-observability&name=Cloudflare%20Observability&description=Debug%20and%20get%20insight%20into%20your%20application%27s%20logs%20and%20analytics&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fobservability.mcp.cloudflare.com%2Fmcp&id=cloudflare-observability&name=Cloudflare%20Observability&description=Debug%20and%20get%20insight%20into%20your%20application%27s%20logs%20and%20analytics&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
**Command**
|
**Command**
|
||||||
```sh
|
```sh
|
||||||
npx mcp-remote https://observability.mcp.cloudflare.com/sse
|
npx mcp-remote https://observability.mcp.cloudflare.com/mcp
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
@@ -94,7 +94,7 @@ Choose one or more servers based on your needs. Here are the most popular config
|
|||||||
|
|
||||||
2. Choose to add a `Command-line Extension`
|
2. Choose to add a `Command-line Extension`
|
||||||
3. Give your extension a name: `cloudflare-observability`
|
3. Give your extension a name: `cloudflare-observability`
|
||||||
4. Enter the command: `npx mcp-remote https://observability.mcp.cloudflare.com/sse`
|
4. Enter the command: `npx mcp-remote https://observability.mcp.cloudflare.com/mcp`
|
||||||
5. Set timeout: `300` seconds
|
5. Set timeout: `300` seconds
|
||||||
6. Add environment variable:
|
6. Add environment variable:
|
||||||
- Name: `CLOUDFLARE_API_TOKEN`
|
- Name: `CLOUDFLARE_API_TOKEN`
|
||||||
@@ -107,10 +107,10 @@ Choose one or more servers based on your needs. Here are the most popular config
|
|||||||
|
|
||||||
<Tabs groupId="interface">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fbindings.mcp.cloudflare.com%2Fsse&id=cloudflare-bindings&name=Cloudflare%20Workers%20Bindings&description=Build%20Workers%20applications%20with%20storage%2C%20AI%2C%20and%20compute%20primitives&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fbindings.mcp.cloudflare.com%2Fmcp&id=cloudflare-bindings&name=Cloudflare%20Workers%20Bindings&description=Build%20Workers%20applications%20with%20storage%2C%20AI%2C%20and%20compute%20primitives&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
Command: `npx mcp-remote https://bindings.mcp.cloudflare.com/sse`
|
Command: `npx mcp-remote https://bindings.mcp.cloudflare.com/mcp`
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
@@ -118,10 +118,10 @@ Choose one or more servers based on your needs. Here are the most popular config
|
|||||||
|
|
||||||
<Tabs groupId="interface">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fradar.mcp.cloudflare.com%2Fsse&id=cloudflare-radar&name=Cloudflare%20Radar&description=Get%20global%20Internet%20traffic%20insights%2C%20trends%2C%20URL%20scans%2C%20and%20other%20utilities&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
[Launch the installer](goose://extension?cmd=npx&arg=mcp-remote&arg=https%3A%2F%2Fradar.mcp.cloudflare.com%2Fmcp&id=cloudflare-radar&name=Cloudflare%20Radar&description=Get%20global%20Internet%20traffic%20insights%2C%20trends%2C%20URL%20scans%2C%20and%20other%20utilities&env=CLOUDFLARE_API_TOKEN%3DCloudflare%20API%20Token)
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
Command: `npx mcp-remote https://radar.mcp.cloudflare.com/sse`
|
Command: `npx mcp-remote https://radar.mcp.cloudflare.com/mcp`
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
|||||||
@@ -132,9 +132,8 @@ You'll need to re-authenticate once a day when using the Google Drive extension.
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -69,9 +69,8 @@ Note that you'll need [Node.js](https://nodejs.org/) installed on your system to
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -22,16 +22,16 @@ This tutorial covers how to add the JetBrains extension to integrate with any Je
|
|||||||
<TabItem value="later" label="2025.2 and later" default>
|
<TabItem value="later" label="2025.2 and later" default>
|
||||||
|
|
||||||
Versions 2025.2 and later have built-in MCP server support and generate a dynamic configuration specific to your IDE instance.
|
Versions 2025.2 and later have built-in MCP server support and generate a dynamic configuration specific to your IDE instance.
|
||||||
|
|
||||||
The instructions in this tutorial show how to configure the recommended remote SSE extension. See your IDE's documentation for more details (e.g. [MCP Server](https://www.jetbrains.com/help/idea/mcp-server.html) for IntelliJ IDEA).
|
See your IDE's documentation for more details (e.g. [MCP Server](https://www.jetbrains.com/help/idea/mcp-server.html) for IntelliJ IDEA).
|
||||||
|
|
||||||
:::tip TLDR
|
:::tip TLDR
|
||||||
<Tabs groupId="interface">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
Use `Add custom extension` in Settings → Extensions to add a `Server-Sent Events (SSE)` extension type with your IDE-specific SSE config.
|
Use `Add custom extension` in Settings → Extensions with the command from `Copy Stdio Config` in your IDE.
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
Use `goose configure` to add a `Remote Extension (SSE)` extension type with your IDE-specific SSE config.
|
Use `goose configure` with the command from `Copy Stdio Config` in your IDE.
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
:::
|
:::
|
||||||
@@ -43,11 +43,11 @@ This tutorial covers how to add the JetBrains extension to integrate with any Je
|
|||||||
|
|
||||||
1. Go to `Settings > Tools > MCP Server` in your IDE
|
1. Go to `Settings > Tools > MCP Server` in your IDE
|
||||||
2. If needed, click `Enable MCP Server` to enable the MCP server
|
2. If needed, click `Enable MCP Server` to enable the MCP server
|
||||||
3. Click `Copy SSE Config`
|
3. Click `Copy Stdio Config`
|
||||||
4. Click `OK` to save your changes and start the server
|
4. Click `OK` to save your changes and start the server
|
||||||
5. Copy the `url` value from the config
|
5. Copy the `command`, `args`, and `env` values from the config
|
||||||
|
|
||||||
2. Add the JetBrains extension to goose, replacing "YOUR_IDE_SPECIFIC_URL" in the instructions with the URL you copied:
|
2. Add the JetBrains extension to goose using the command from the config:
|
||||||
<Tabs groupId="interface">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
|
1. Click the <PanelLeft className="inline" size={16} /> button in the top-left to open the sidebar
|
||||||
@@ -55,18 +55,26 @@ This tutorial covers how to add the JetBrains extension to integrate with any Je
|
|||||||
3. Click `Add custom extension`
|
3. Click `Add custom extension`
|
||||||
4. On the `Add custom extension` modal, enter the following:
|
4. On the `Add custom extension` modal, enter the following:
|
||||||
- **Extension Name**: JetBrains
|
- **Extension Name**: JetBrains
|
||||||
- **Type**: Server-Sent Events (SSE)
|
- **Type**: STDIO
|
||||||
- **Endpoint**: YOUR_IDE_SPECIFIC_URL
|
- **Description**: Integrate goose with any JetBrains IDE
|
||||||
|
- **Command**: Combine the `command` and `args` from your IDE's Stdio config into a single command string
|
||||||
|
- **Environment Variables**: Add `IJ_MCP_SERVER_PORT` with the port value from the `env` section of your copied Stdio config
|
||||||
5. Click `Add Extension` to save the extension
|
5. Click `Add Extension` to save the extension
|
||||||
6. Navigate to the chat
|
6. Navigate to the chat
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
<CLIExtensionInstructions
|
<CLIExtensionInstructions
|
||||||
name="jetbrains"
|
name="jetbrains"
|
||||||
description="Integrate goose with any JetBrains IDE"
|
description="Integrate goose with any JetBrains IDE"
|
||||||
type="sse"
|
type="stdio"
|
||||||
url="YOUR_IDE_SPECIFIC_URL"
|
command="YOUR_COMMAND_AND_ARGS_FROM_IDE"
|
||||||
timeout={300}
|
timeout={300}
|
||||||
|
envVars={[{ key: "IJ_MCP_SERVER_PORT", value: "YOUR_PORT_FROM_IDE" }]}
|
||||||
|
commandNote={
|
||||||
|
<>
|
||||||
|
Combine <code>command</code> and <code>args</code> into a single string. The port value comes from the <code>env</code> section of your copied Stdio config.
|
||||||
|
</>
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
@@ -158,8 +166,8 @@ Anthropic's Claude 4 Sonnet was used for this task.
|
|||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
:::tip
|
:::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 goose’s modifications, revert if needed, and track improvements.
|
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 goose's modifications, revert if needed, and track improvements.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### goose Prompt
|
### goose Prompt
|
||||||
@@ -175,7 +183,7 @@ After 2 minutes, goose was done with the upgrade! 🎉
|
|||||||
I'll make several improvements to modernize this codebase to use Java 21 (latest LTS) features. Here are the changes I'll implement:
|
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
|
1. Update the `pom.xml` to use Java 21
|
||||||
2. Use newer Java features
|
2. Use newer Java features
|
||||||
|
|
||||||
[... code changes ...]
|
[... code changes ...]
|
||||||
|
|
||||||
@@ -248,7 +256,6 @@ The codebase is now using the latest Java LTS version (21) and incorporates many
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Using the JetBrains extension provided several advantages and made it easier for goose to:
|
Using the JetBrains extension provided several advantages and made it easier for goose to:
|
||||||
- navigate through the codebase
|
- navigate through the codebase
|
||||||
- track changes
|
- track changes
|
||||||
|
|||||||
@@ -19,40 +19,22 @@ This tutorial covers how to add the [Pieces for Developers MCP Server](https://d
|
|||||||
|
|
||||||
2. Enable [Long-Term Memory Context](https://docs.pieces.app/products/quick-guides/ltm-context) in PiecesOS
|
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">
|
<Tabs groupId="interface">
|
||||||
<TabItem value="ui" label="goose Desktop" default>
|
<TabItem value="ui" label="goose Desktop" default>
|
||||||
<GooseDesktopInstaller
|
<GooseDesktopInstaller
|
||||||
extensionId="pieces"
|
extensionId="pieces"
|
||||||
extensionName="Pieces for Developers"
|
extensionName="Pieces for Developers"
|
||||||
description="Provides access to your Pieces Long-Term Memory. You need to have Pieces installed to use this."
|
description="Provides access to your Pieces Long-Term Memory. You need to have Pieces installed to use this."
|
||||||
url="http://localhost:39300/model_context_protocol/2024-11-05/sse"
|
command="uvx"
|
||||||
|
args={["--from", "pieces-cli", "pieces", "--ignore-onboarding", "mcp", "start"]}
|
||||||
/>
|
/>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="cli" label="goose CLI">
|
<TabItem value="cli" label="goose CLI">
|
||||||
<CLIExtensionInstructions
|
<CLIExtensionInstructions
|
||||||
name="Pieces"
|
name="Pieces"
|
||||||
description="Provides access to your Pieces Long-Term Memory"
|
description="Provides access to your Pieces Long-Term Memory"
|
||||||
type="sse"
|
type="stdio"
|
||||||
url="http://localhost:39300/model_context_protocol/2024-11-05/sse"
|
command="uvx --from pieces-cli pieces --ignore-onboarding mcp start"
|
||||||
commandNote={
|
|
||||||
<>
|
|
||||||
Use the server URL you copied from PiecesOS settings. PiecesOS may use a different port if 39300 is already in use on your system.
|
|
||||||
</>
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
@@ -74,7 +56,7 @@ Here's a report summarizing your key activities from yesterday, based on the mos
|
|||||||
|
|
||||||
1. Code Development with goose:
|
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.
|
Activity: You worked on integrating 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.
|
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:
|
2. Documentation Updates:
|
||||||
@@ -96,11 +78,11 @@ Here's a report summarizing your key activities from yesterday, based on the mos
|
|||||||
|
|
||||||
Activity: Planned integration workflows for MCP and documented their use cases.
|
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.
|
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.
|
These activities demonstrate a productive day with a focus on development, collaboration, and content management within your technical community.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
:::tip
|
:::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).
|
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).
|
||||||
:::
|
:::
|
||||||
|
|||||||
@@ -94,9 +94,8 @@ Note that you'll need [Node.js](https://nodejs.org/) installed on your system to
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -63,9 +63,8 @@ Note that you'll need [Node.js](https://nodejs.org/) installed on your system to
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -69,9 +69,8 @@ Before adding this extension, make sure [PortAudio](https://github.com/GoogleClo
|
|||||||
│ ○ Built-in Extension
|
│ ○ Built-in Extension
|
||||||
// highlight-start
|
// highlight-start
|
||||||
│ ● Command-line Extension (Run a local command or script)
|
│ ● Command-line Extension (Run a local command or script)
|
||||||
// highlight-end
|
// highlight-end
|
||||||
│ ○ Remote Extension (SSE)
|
│ ○ Remote Extension (Streamable HTTP)
|
||||||
│ ○ Remote Extension (Streaming HTTP)
|
|
||||||
└
|
└
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ interface EnvVar {
|
|||||||
interface CLIExtensionInstructionsProps {
|
interface CLIExtensionInstructionsProps {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
type?: 'stdio' | 'sse' | 'http';
|
type?: 'stdio' | 'http';
|
||||||
command?: string; // Only for stdio
|
command?: string; // Only for stdio
|
||||||
url?: string; // For both sse and http
|
url?: string; // For http
|
||||||
timeout?: number;
|
timeout?: number;
|
||||||
envVars?: EnvVar[]; // For stdio: environment variables, for http: headers
|
envVars?: EnvVar[]; // For stdio: environment variables, for http: headers
|
||||||
infoNote?: string;
|
infoNote?: string;
|
||||||
@@ -31,9 +31,8 @@ export default function CLIExtensionInstructions({
|
|||||||
commandNote,
|
commandNote,
|
||||||
}: CLIExtensionInstructionsProps) {
|
}: CLIExtensionInstructionsProps) {
|
||||||
const hasEnvVars = envVars.length > 0;
|
const hasEnvVars = envVars.length > 0;
|
||||||
const isSSE = type === 'sse';
|
|
||||||
const isHttp = type === 'http';
|
const isHttp = type === 'http';
|
||||||
const isRemote = isSSE || isHttp;
|
const isRemote = isHttp;
|
||||||
|
|
||||||
// Determine last-step prompt text
|
// Determine last-step prompt text
|
||||||
const lastStepText = isHttp
|
const lastStepText = isHttp
|
||||||
@@ -57,27 +56,23 @@ export default function CLIExtensionInstructions({
|
|||||||
<li>
|
<li>
|
||||||
Choose to add a{' '}
|
Choose to add a{' '}
|
||||||
<code>
|
<code>
|
||||||
{isSSE
|
{isHttp
|
||||||
? 'Remote Extension (SSE)'
|
? 'Remote Extension (Streamable HTTP)'
|
||||||
: isHttp
|
|
||||||
? 'Remote Extension (Streaming HTTP)'
|
|
||||||
: 'Command-line Extension'
|
: 'Command-line Extension'
|
||||||
}
|
}
|
||||||
</code>.
|
</code>.
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<CodeBlock language="sh">{`┌ goose-configure
|
<CodeBlock language="sh">{`┌ goose-configure
|
||||||
│
|
│
|
||||||
◇ What would you like to configure?
|
◇ What would you like to configure?
|
||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◆ What type of extension would you like to add?
|
◆ What type of extension would you like to add?
|
||||||
${
|
${
|
||||||
isSSE
|
isHttp
|
||||||
? '│ ○ Built-in Extension\n│ ○ Command-line Extension\n// highlight-start\n│ ● Remote Extension (SSE) (Connect to a remote extension via Server-Sent Events)\n// highlight-end\n│ ○ Remote Extension (Streaming HTTP)'
|
? '│ ○ Built-in Extension\n│ ○ Command-line Extension\n// highlight-start\n│ ● Remote Extension (Streamable HTTP) (Connect to a remote extension via MCP Streamable HTTP)\n// highlight-end'
|
||||||
: isHttp
|
: '│ ○ Built-in Extension\n// highlight-start\n│ ● Command-line Extension (Run a local command or script)\n// highlight-end\n│ ○ Remote Extension (Streamable HTTP)'
|
||||||
? '│ ○ Built-in Extension\n│ ○ Command-line Extension\n│ ○ Remote Extension (SSE)\n// highlight-start\n│ ● Remote Extension (Streaming HTTP) (Connect to a remote extension via MCP Streaming HTTP)\n// highlight-end'
|
|
||||||
: '│ ○ Built-in Extension\n// highlight-start\n│ ● Command-line Extension (Run a local command or script)\n// highlight-end\n│ ○ Remote Extension (SSE)\n│ ○ Remote Extension (Streaming HTTP)'
|
|
||||||
}
|
}
|
||||||
└`}</CodeBlock>
|
└`}</CodeBlock>
|
||||||
|
|
||||||
@@ -90,7 +85,7 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : isHttp ? 'Remote Extension (Streaming HTTP)' : 'Command-line Extension'}
|
│ ${isHttp ? 'Remote Extension (Streamable HTTP)' : 'Command-line Extension'}
|
||||||
│
|
│
|
||||||
// highlight-start
|
// highlight-start
|
||||||
◆ What would you like to call this extension?
|
◆ What would you like to call this extension?
|
||||||
@@ -101,7 +96,7 @@ ${
|
|||||||
{isRemote ? (
|
{isRemote ? (
|
||||||
<>
|
<>
|
||||||
<ol start={4}>
|
<ol start={4}>
|
||||||
<li>Enter the {isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}.</li>
|
<li>Enter the Streamable HTTP endpoint URI.</li>
|
||||||
</ol>
|
</ol>
|
||||||
{commandNote && (
|
{commandNote && (
|
||||||
<>
|
<>
|
||||||
@@ -117,13 +112,13 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : 'Remote Extension (Streaming HTTP)'}
|
│ Remote Extension (Streamable HTTP)
|
||||||
│
|
│
|
||||||
◇ What would you like to call this extension?
|
◇ What would you like to call this extension?
|
||||||
│ ${name}
|
│ ${name}
|
||||||
│
|
│
|
||||||
// highlight-start
|
// highlight-start
|
||||||
◆ What is the ${isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}?
|
◆ What is the Streamable HTTP endpoint URI?
|
||||||
│ ${url}
|
│ ${url}
|
||||||
// highlight-end
|
// highlight-end
|
||||||
└`}</CodeBlock>
|
└`}</CodeBlock>
|
||||||
@@ -172,14 +167,14 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : isHttp ? 'Remote Extension (Streaming HTTP)' : 'Command-line Extension'}
|
│ ${isHttp ? 'Remote Extension (Streamable HTTP)' : 'Command-line Extension'}
|
||||||
│
|
│
|
||||||
◇ What would you like to call this extension?
|
◇ What would you like to call this extension?
|
||||||
│ ${name}
|
│ ${name}
|
||||||
│
|
│
|
||||||
${
|
${
|
||||||
isRemote
|
isRemote
|
||||||
? `◇ What is the ${isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}?\n│ ${url}\n│`
|
? `◇ What is the Streamable HTTP endpoint URI?\n│ ${url}\n│`
|
||||||
: `◇ What command should be run?\n│ ${command}\n│`
|
: `◇ What command should be run?\n│ ${command}\n│`
|
||||||
}
|
}
|
||||||
// highlight-start
|
// highlight-start
|
||||||
@@ -197,14 +192,14 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : isHttp ? 'Remote Extension (Streaming HTTP)' : 'Command-line Extension'}
|
│ ${isHttp ? 'Remote Extension (Streamable HTTP)' : 'Command-line Extension'}
|
||||||
│
|
│
|
||||||
◇ What would you like to call this extension?
|
◇ What would you like to call this extension?
|
||||||
│ ${name}
|
│ ${name}
|
||||||
│
|
│
|
||||||
${
|
${
|
||||||
isRemote
|
isRemote
|
||||||
? `◇ What is the ${isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}?\n│ ${url}\n│`
|
? `◇ What is the Streamable HTTP endpoint URI?\n│ ${url}\n│`
|
||||||
: `◇ What command should be run?\n│ ${command}\n│`
|
: `◇ What command should be run?\n│ ${command}\n│`
|
||||||
}
|
}
|
||||||
◇ Please set the timeout for this tool (in secs):
|
◇ Please set the timeout for this tool (in secs):
|
||||||
@@ -236,14 +231,14 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : isHttp ? 'Remote Extension (Streaming HTTP)' : 'Command-line Extension'}
|
│ ${isHttp ? 'Remote Extension (Streamable HTTP)' : 'Command-line Extension'}
|
||||||
│
|
│
|
||||||
◇ What would you like to call this extension?
|
◇ What would you like to call this extension?
|
||||||
│ ${name}
|
│ ${name}
|
||||||
│
|
│
|
||||||
${
|
${
|
||||||
isRemote
|
isRemote
|
||||||
? `◇ What is the ${isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}?\n│ ${url}\n│`
|
? `◇ What is the Streamable HTTP endpoint URI?\n│ ${url}\n│`
|
||||||
: `◇ What command should be run?\n│ ${command}\n│`
|
: `◇ What command should be run?\n│ ${command}\n│`
|
||||||
}
|
}
|
||||||
◇ Please set the timeout for this tool (in secs):
|
◇ Please set the timeout for this tool (in secs):
|
||||||
@@ -277,14 +272,14 @@ ${
|
|||||||
│ Add Extension
|
│ Add Extension
|
||||||
│
|
│
|
||||||
◇ What type of extension would you like to add?
|
◇ What type of extension would you like to add?
|
||||||
│ ${isSSE ? 'Remote Extension (SSE)' : isHttp ? 'Remote Extension (Streaming HTTP)' : 'Command-line Extension'}
|
│ ${isHttp ? 'Remote Extension (Streamable HTTP)' : 'Command-line Extension'}
|
||||||
│
|
│
|
||||||
◇ What would you like to call this extension?
|
◇ What would you like to call this extension?
|
||||||
│ ${name}
|
│ ${name}
|
||||||
│
|
│
|
||||||
${
|
${
|
||||||
isRemote
|
isRemote
|
||||||
? `◇ What is the ${isSSE ? 'SSE endpoint URI' : 'Streaming HTTP endpoint URI'}?\n│ ${url}\n│`
|
? `◇ What is the Streamable HTTP endpoint URI?\n│ ${url}\n│`
|
||||||
: `◇ What command should be run?\n│ ${command}\n│`
|
: `◇ What command should be run?\n│ ${command}\n│`
|
||||||
}
|
}
|
||||||
◇ Please set the timeout for this tool (in secs):
|
◇ Please set the timeout for this tool (in secs):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ interface GooseDesktopInstallerProps {
|
|||||||
extensionId: string;
|
extensionId: string;
|
||||||
extensionName: string;
|
extensionName: string;
|
||||||
description: string;
|
description: string;
|
||||||
type?: 'stdio' | 'sse' | 'http'; // Extension type (http maps to streamable_http)
|
type?: 'stdio' | 'http'; // Extension type (http maps to streamable_http)
|
||||||
// Command-line extension props (optional when using url)
|
// Command-line extension props (optional when using url)
|
||||||
command?: string;
|
command?: string;
|
||||||
args?: string[];
|
args?: string[];
|
||||||
@@ -41,7 +41,7 @@ export default function GooseDesktopInstaller({
|
|||||||
}: GooseDesktopInstallerProps) {
|
}: GooseDesktopInstallerProps) {
|
||||||
|
|
||||||
// Determine extension type with backward compatibility
|
// Determine extension type with backward compatibility
|
||||||
const extensionType = type || (command ? 'stdio' : url ? 'sse' : 'stdio');
|
const extensionType = type || (command ? 'stdio' : url ? 'http' : 'stdio');
|
||||||
|
|
||||||
// Build the goose:// URL
|
// Build the goose:// URL
|
||||||
const buildGooseUrl = () => {
|
const buildGooseUrl = () => {
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
"extensions": [
|
"extensions": [
|
||||||
{
|
{
|
||||||
"name": "Pieces",
|
"name": "Pieces",
|
||||||
"url": "http://localhost:39300/model_context_protocol/2024-11-05/sse",
|
"command": "uvx --from pieces-cli pieces --ignore-onboarding mcp start",
|
||||||
"is_builtin": false
|
"is_builtin": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -357,10 +357,8 @@
|
|||||||
"id": "jetbrains",
|
"id": "jetbrains",
|
||||||
"name": "JetBrains",
|
"name": "JetBrains",
|
||||||
"description": "Integrate with any JetBrains IDE (requires local setup, dependent on your IDE version)",
|
"description": "Integrate with any JetBrains IDE (requires local setup, dependent on your IDE version)",
|
||||||
"url": "http://localhost:<PORT>/sse",
|
|
||||||
"type": "remote",
|
|
||||||
"link": "https://github.com/JetBrains/mcp-jetbrains",
|
"link": "https://github.com/JetBrains/mcp-jetbrains",
|
||||||
"installation_notes": "IDE v2025.2 and later: Enable SSE configuration from Settings > Tools > MCP Server, then update the placeholder SSE URL in the following command. If installing from the link, you must update the URL from the Extensions page before activating the extension. For earlier IDE versions, you must install the MCP Server plugin and use npx package manager to install the extension.",
|
"installation_notes": "Requires IDE v2025.2+. Use STDIO from Settings > Tools > MCP Server.",
|
||||||
"is_builtin": false,
|
"is_builtin": false,
|
||||||
"endorsed": true,
|
"endorsed": true,
|
||||||
"environmentVariables": []
|
"environmentVariables": []
|
||||||
@@ -450,7 +448,7 @@
|
|||||||
"type": "streamable-http",
|
"type": "streamable-http",
|
||||||
"url": "https://mcp.neon.tech/mcp",
|
"url": "https://mcp.neon.tech/mcp",
|
||||||
"link": "https://github.com/neondatabase/mcp-server-neon",
|
"link": "https://github.com/neondatabase/mcp-server-neon",
|
||||||
"installation_notes": "Streaming HTTP extension with OAuth browser authentication to your Neon account.",
|
"installation_notes": "Streamable HTTP extension with OAuth browser authentication to your Neon account.",
|
||||||
"is_builtin": false,
|
"is_builtin": false,
|
||||||
"endorsed": true,
|
"endorsed": true,
|
||||||
"environmentVariables": []
|
"environmentVariables": []
|
||||||
@@ -515,13 +513,12 @@
|
|||||||
"id": "pieces",
|
"id": "pieces",
|
||||||
"name": "Pieces",
|
"name": "Pieces",
|
||||||
"description": "Provides access to your Pieces long-term memory. You need to have Pieces installed to use this.",
|
"description": "Provides access to your Pieces long-term memory. You need to have Pieces installed to use this.",
|
||||||
"url": "http://localhost:39300/model_context_protocol/2024-11-05/sse",
|
"command": "uvx --from pieces-cli pieces --ignore-onboarding mcp start",
|
||||||
"link": "https://pieces.app?utm_source=goose&utm_medium=collab&utm_campaign=mcp",
|
"link": "https://pieces.app?utm_source=goose&utm_medium=collab&utm_campaign=mcp",
|
||||||
"installation_notes": "You need to install Pieces first, and have this running.",
|
"installation_notes": "Install PiecesOS first.",
|
||||||
"is_builtin": false,
|
"is_builtin": false,
|
||||||
"endorsed": true,
|
"endorsed": true,
|
||||||
"environmentVariables": [],
|
"environmentVariables": []
|
||||||
"type": "remote"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "playwright",
|
"id": "playwright",
|
||||||
@@ -591,7 +588,7 @@
|
|||||||
"type": "streamable-http",
|
"type": "streamable-http",
|
||||||
"url": "https://rube.app/mcp",
|
"url": "https://rube.app/mcp",
|
||||||
"link": "https://rube.app",
|
"link": "https://rube.app",
|
||||||
"installation_notes": "Streaming HTTP extension with OAuth browser authentication to your Rube account.",
|
"installation_notes": "Streamable HTTP extension with OAuth browser authentication to your Rube account.",
|
||||||
"is_builtin": false,
|
"is_builtin": false,
|
||||||
"endorsed": true,
|
"endorsed": true,
|
||||||
"environmentVariables": []
|
"environmentVariables": []
|
||||||
@@ -636,7 +633,7 @@
|
|||||||
"type": "streamable-http",
|
"type": "streamable-http",
|
||||||
"url": "https://mcp.supabase.com/mcp",
|
"url": "https://mcp.supabase.com/mcp",
|
||||||
"link": "https://github.com/supabase-community/supabase-mcp",
|
"link": "https://github.com/supabase-community/supabase-mcp",
|
||||||
"installation_notes": "Streaming HTTP extension with OAuth browser authentication to your Supabase account.",
|
"installation_notes": "Streamable HTTP extension with OAuth browser authentication to your Supabase account.",
|
||||||
"is_builtin": false,
|
"is_builtin": false,
|
||||||
"endorsed": true,
|
"endorsed": true,
|
||||||
"environmentVariables": [
|
"environmentVariables": [
|
||||||
|
|||||||
Generated
+21
@@ -51,6 +51,7 @@
|
|||||||
"remark-breaks": "^4.0.0",
|
"remark-breaks": "^4.0.0",
|
||||||
"remark-gfm": "^4.0.1",
|
"remark-gfm": "^4.0.1",
|
||||||
"remark-math": "^6.0.0",
|
"remark-math": "^6.0.0",
|
||||||
|
"shell-quote": "^1.8.3",
|
||||||
"split-type": "^0.3.4",
|
"split-type": "^0.3.4",
|
||||||
"swr": "^2.3.8",
|
"swr": "^2.3.8",
|
||||||
"tailwind-merge": "^3.4.0",
|
"tailwind-merge": "^3.4.0",
|
||||||
@@ -88,6 +89,7 @@
|
|||||||
"@types/react": "^19.2.8",
|
"@types/react": "^19.2.8",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@types/react-syntax-highlighter": "^15.5.13",
|
"@types/react-syntax-highlighter": "^15.5.13",
|
||||||
|
"@types/shell-quote": "^1.7.5",
|
||||||
"@types/yauzl": "^2.10.3",
|
"@types/yauzl": "^2.10.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
||||||
"@typescript-eslint/parser": "^8.53.0",
|
"@typescript-eslint/parser": "^8.53.0",
|
||||||
@@ -6472,6 +6474,13 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/shell-quote": {
|
||||||
|
"version": "1.7.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/shell-quote/-/shell-quote-1.7.5.tgz",
|
||||||
|
"integrity": "sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@types/unist": {
|
"node_modules/@types/unist": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
|
||||||
@@ -18252,6 +18261,18 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/shell-quote": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
|
||||||
|
"integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/side-channel": {
|
"node_modules/side-channel": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
||||||
|
|||||||
@@ -81,6 +81,7 @@
|
|||||||
"remark-breaks": "^4.0.0",
|
"remark-breaks": "^4.0.0",
|
||||||
"remark-gfm": "^4.0.1",
|
"remark-gfm": "^4.0.1",
|
||||||
"remark-math": "^6.0.0",
|
"remark-math": "^6.0.0",
|
||||||
|
"shell-quote": "^1.8.3",
|
||||||
"split-type": "^0.3.4",
|
"split-type": "^0.3.4",
|
||||||
"swr": "^2.3.8",
|
"swr": "^2.3.8",
|
||||||
"tailwind-merge": "^3.4.0",
|
"tailwind-merge": "^3.4.0",
|
||||||
@@ -118,6 +119,7 @@
|
|||||||
"@types/react": "^19.2.8",
|
"@types/react": "^19.2.8",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@types/react-syntax-highlighter": "^15.5.13",
|
"@types/react-syntax-highlighter": "^15.5.13",
|
||||||
|
"@types/shell-quote": "^1.7.5",
|
||||||
"@types/yauzl": "^2.10.3",
|
"@types/yauzl": "^2.10.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
||||||
"@typescript-eslint/parser": "^8.53.0",
|
"@typescript-eslint/parser": "^8.53.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import ExtensionItem from './ExtensionItem';
|
import ExtensionItem from './ExtensionItem';
|
||||||
import builtInExtensionsData from '../../../../built-in-extensions.json';
|
import builtInExtensionsData from '../../../../built-in-extensions.json';
|
||||||
import { combineCmdAndArgs } from '../utils';
|
import { quote } from 'shell-quote';
|
||||||
import { ExtensionConfig } from '../../../../api';
|
import { ExtensionConfig } from '../../../../api';
|
||||||
import { FixedExtensionEntry } from '../../../ConfigContext';
|
import { FixedExtensionEntry } from '../../../ConfigContext';
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ export function getSubtitle(config: ExtensionConfig) {
|
|||||||
default:
|
default:
|
||||||
return {
|
return {
|
||||||
description: config.description || null,
|
description: config.description || null,
|
||||||
command: 'cmd' in config ? combineCmdAndArgs(config.cmd, config.args) : null,
|
command: 'cmd' in config ? quote([config.cmd, ...config.args]) : null,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,9 @@ import {
|
|||||||
getDefaultFormData,
|
getDefaultFormData,
|
||||||
extensionToFormData,
|
extensionToFormData,
|
||||||
createExtensionConfig,
|
createExtensionConfig,
|
||||||
splitCmdAndArgs,
|
|
||||||
combineCmdAndArgs,
|
|
||||||
extractCommand,
|
extractCommand,
|
||||||
extractExtensionName,
|
extractExtensionName,
|
||||||
|
splitCmdAndArgs,
|
||||||
DEFAULT_EXTENSION_TIMEOUT,
|
DEFAULT_EXTENSION_TIMEOUT,
|
||||||
} from './utils';
|
} from './utils';
|
||||||
import type { FixedExtensionEntry } from '../../ConfigContext';
|
import type { FixedExtensionEntry } from '../../ConfigContext';
|
||||||
@@ -245,38 +244,21 @@ describe('Extension Utils', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('splitCmdAndArgs', () => {
|
describe('splitCmdAndArgs', () => {
|
||||||
it('should split command and arguments correctly', () => {
|
it.each([
|
||||||
expect(splitCmdAndArgs('python script.py --flag value')).toEqual({
|
['python script.py', { cmd: 'python', args: ['script.py'] }],
|
||||||
cmd: 'python',
|
['python script.py --flag', { cmd: 'python', args: ['script.py', '--flag'] }],
|
||||||
args: ['script.py', '--flag', 'value'],
|
[
|
||||||
});
|
"java -classpath '/path/with spaces/lib.jar' Main",
|
||||||
|
{ cmd: 'java', args: ['-classpath', '/path/with spaces/lib.jar', 'Main'] },
|
||||||
expect(splitCmdAndArgs('node')).toEqual({
|
],
|
||||||
cmd: 'node',
|
[
|
||||||
args: [],
|
'node --max-old-space-size=4096 app.js',
|
||||||
});
|
{ cmd: 'node', args: ['--max-old-space-size=4096', 'app.js'] },
|
||||||
|
],
|
||||||
expect(splitCmdAndArgs('')).toEqual({
|
[' python script.py ', { cmd: 'python', args: ['script.py'] }],
|
||||||
cmd: '',
|
['', { cmd: '', args: [] }],
|
||||||
args: [],
|
])('splits %j correctly', (input, expected) => {
|
||||||
});
|
expect(splitCmdAndArgs(input)).toEqual(expected);
|
||||||
|
|
||||||
expect(splitCmdAndArgs(' multiple spaces between args ')).toEqual({
|
|
||||||
cmd: 'multiple',
|
|
||||||
args: ['spaces', 'between', 'args'],
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('combineCmdAndArgs', () => {
|
|
||||||
it('should combine command and arguments correctly', () => {
|
|
||||||
expect(combineCmdAndArgs('python', ['script.py', '--flag', 'value'])).toBe(
|
|
||||||
'python script.py --flag value'
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(combineCmdAndArgs('node', [])).toBe('node');
|
|
||||||
|
|
||||||
expect(combineCmdAndArgs('', ['arg1', 'arg2'])).toBe(' arg1 arg2');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { parse, quote } from 'shell-quote';
|
||||||
|
|
||||||
// Default extension timeout in seconds
|
// Default extension timeout in seconds
|
||||||
// TODO: keep in sync with rust better
|
// TODO: keep in sync with rust better
|
||||||
|
|
||||||
@@ -103,7 +105,7 @@ export function extensionToFormData(extension: FixedExtensionEntry): ExtensionFo
|
|||||||
extension.type === 'platform'
|
extension.type === 'platform'
|
||||||
? 'stdio'
|
? 'stdio'
|
||||||
: extension.type,
|
: extension.type,
|
||||||
cmd: extension.type === 'stdio' ? combineCmdAndArgs(extension.cmd, extension.args) : undefined,
|
cmd: extension.type === 'stdio' ? quote([extension.cmd, ...extension.args]) : undefined,
|
||||||
endpoint:
|
endpoint:
|
||||||
extension.type === 'streamable_http' || extension.type === 'sse'
|
extension.type === 'streamable_http' || extension.type === 'sse'
|
||||||
? (extension.uri ?? undefined)
|
? (extension.uri ?? undefined)
|
||||||
@@ -168,18 +170,8 @@ export function createExtensionConfig(formData: ExtensionFormData): ExtensionCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function splitCmdAndArgs(str: string): { cmd: string; args: string[] } {
|
export function splitCmdAndArgs(str: string): { cmd: string; args: string[] } {
|
||||||
const words = str.trim().split(/\s+/);
|
const parts = parse(str.trim()).filter((p): p is string => typeof p === 'string');
|
||||||
const cmd = words[0] || '';
|
return { cmd: parts[0] || '', args: parts.slice(1) };
|
||||||
const args = words.slice(1);
|
|
||||||
|
|
||||||
return {
|
|
||||||
cmd,
|
|
||||||
args,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function combineCmdAndArgs(cmd: string, args: string[]): string {
|
|
||||||
return [cmd, ...args].join(' ');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function extractCommand(link: string): string {
|
export function extractCommand(link: string): string {
|
||||||
|
|||||||
Reference in New Issue
Block a user