Skip to content

Commit 093e993

Browse files
committed
Add documentation for MCP usage with Gordon
Signed-off-by: Djordje Lukic <[email protected]>
1 parent 0020f7d commit 093e993

File tree

4 files changed

+144
-1
lines changed

4 files changed

+144
-1
lines changed

_vale/Docker/Acronyms.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ exceptions:
7575
- LLDB
7676
- LTS
7777
- MAC
78+
- MCP
7879
- MDM
7980
- MDN
8081
- MSI
File renamed without changes.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
---
2+
title: MCP
3+
description: Learn how to use MCP servers with Gordon
4+
keywords: ai, mcp, gordon
5+
---
6+
7+
## What is MCP?
8+
9+
Anthropic recently announced the [Model Context Protocol](https://www.anthropic.com/news/model-context-protocol) (MCP) specification, an open protocol that standardises how applications provide context to large language models. MCP functions as a client-server protocol, where the client (e.g., an application like Gordon) sends requests, and the server processes those requests to deliver the necessary context to the AI.
10+
11+
Gordon, along with other MCP clients like Claude Desktop, can interact with MCP servers running as containers. Docker has partnered with Anthropic to build container images for the [reference implementations](https://github.com/modelcontextprotocol/servers/) of MCP servers, available on Docker Hub under [the mcp namespace](https://hub.docker.com/u/mcp).
12+
13+
## Simple MCP server usage with Gordon
14+
15+
When you run the `docker ai` command in your terminal to ask a question, Gordon will look for a `gordon-mcp.yml` file **in your working directry** for a list of MCP servers that should be used when in that context. The `gordon-mcp.yml` file is a Docker Compose file that configures MCP servers as Compose services for Gordon to access.
16+
17+
As a minimal example, let’s take a look at how you can use the [mcp-time server](https://hub.docker.com/r/mcp/time) to provide temporal capabilities to Gordon. (Source code and documentation is available [here](https://github.com/modelcontextprotocol/servers/tree/main/src/time)).
18+
19+
1. Create the `gordon-mcp.yml` file and add the time server:
20+
21+
```yaml
22+
services:
23+
time:
24+
image: mcp/time
25+
```
26+
27+
2. With this file you can now ask Gordon to tell you the time in another timezone:
28+
29+
```bash
30+
$ docker ai 'what time is it now in kiribati?'
31+
32+
• Calling get_current_time
33+
34+
The current time in Kiribati (Tarawa) is 9:38 PM on January 7, 2025.
35+
36+
```
37+
38+
39+
As you can see, Gordon found the MCP time server and called its tool when needed.
40+
41+
## Advanced usage
42+
43+
Some MCP servers need access to your filesystem or system environment variables. Docker Compose can help with this. Since `gordon-mcp.yml` is a Compose file you can add bind mounts using the regular Docker Compose syntax, which will make your filesystem resources available to the container:
44+
45+
```yaml
46+
services:
47+
fs:
48+
image: mcp/filesystem
49+
command:
50+
- /rootfs
51+
volumes:
52+
- .:/rootfs
53+
```
54+
55+
This `gordon-mcp.yml` file adds filesystem access capabilities to Gordon, since everything runs inside a container Gordon will **only have access to the directories you specify**.
56+
57+
Gordon can handle any number of MCP servers, for example we can give Gordon access to the internet with the `mcp/fetch` server:
58+
59+
```yaml
60+
services:
61+
fetch:
62+
image: mcp/fetch
63+
fs:
64+
image: mcp/filesystem
65+
command:
66+
- /rootfs
67+
volumes:
68+
- .:/rootfs
69+
```
70+
71+
We can now combine these and ask things like
72+
73+
```bash
74+
$ docker ai can you fetch rumpl.dev and write the summary to a file test.txt
75+
76+
• Calling fetch ✔️
77+
• Calling write_file ✔️
78+
79+
The summary of the website rumpl.dev has been successfully written to the file test.txt in the allowed directory. Let me know if you need further assistance!
80+
81+
82+
$ cat test.txt
83+
The website rumpl.dev features a variety of blog posts and articles authored by the site owner. Here's a summary of the content:
84+
85+
1. **Wasmio 2023 (March 25, 2023)**: A recap of the WasmIO 2023 conference held in Barcelona. The author shares their experience as a speaker and praises the organizers for a successful event.
86+
87+
2. **Writing a Window Manager in Rust - Part 2 (January 3, 2023)**: The second part of a series on creating a window manager in Rust. This installment focuses on enhancing the functionality to manage windows effectively.
88+
89+
3. **2022 in Review (December 29, 2022)**: A personal and professional recap of the year 2022. The author reflects on the highs and lows of the year, emphasizing professional achievements.
90+
91+
4. **Writing a Window Manager in Rust - Part 1 (December 28, 2022)**: The first part of the series on building a window manager in Rust. The author discusses setting up a Linux machine and the challenges of working with X11 and Rust.
92+
93+
5. **Add docker/docker to your dependencies (May 10, 2020)**: A guide for Go developers on how to use the Docker client library in their projects. The post includes a code snippet demonstrating the integration.
94+
95+
6. **First (October 11, 2019)**: The inaugural post on the blog, featuring a simple "Hello World" program in Go.%
96+
97+
```
98+
99+
## What’s next?
100+
101+
Now that you’ve learned how to use MCP servers with Gordon, here are a few ways you can get started:
102+
103+
- **Experiment**: Try integrating one or more of the tested MCP servers into your `gordon-mcp.yml` file and explore their capabilities.
104+
1. **Explore the ecosystem**: Check out the [reference implementations on GitHub](https://github.com/modelcontextprotocol/servers/) or browse the [Docker Hub MCP namespace](https://hub.docker.com/u/mcp) for additional servers that might suit your needs.
105+
2. **Build your own**: If none of the existing servers meet your needs, or you’re curious about exploring how they work in more detail, consider developing a custom MCP server. Use the [MCP specification](https://www.anthropic.com/news/model-context-protocol) as a guide.
106+
3. **Share your feedback**: If you discover new servers that work well with Gordon or encounter issues with existing ones, [share your findings to help improve the ecosystem.](https://docker.qualtrics.com/jfe/form/SV_9tT3kdgXfAa6cWa)
107+
108+
With MCP support, Gordon offers powerful extensibility and flexibility to meet your specific use cases. Whether you’re adding temporal awareness, file management, or internet access, the possibilities are endless.
109+
110+
### List of known working MCP Servers
111+
112+
These are the MCP servers that we have tested successfully with Gordon
113+
114+
- `mcp/time`
115+
- `mcp/fetch`
116+
- `mcp/filesystem`
117+
- `mcp/postgres`
118+
- `mcp/git`
119+
- `mcp/sqlite`
120+
- `mcp/github`
121+
122+
### List of untested MCP servers
123+
124+
These are the MCP servers that were not tested but should work if given the appropriate API tokens
125+
126+
- `mcp/brave-search`
127+
- `mcp/gdrive`
128+
- `mcp/slack`
129+
- `mcp/google-maps`
130+
- `mcp/gitlab`
131+
- `mcp/everything`
132+
- `mcp/aws-kb-retrieval-server`
133+
- `mcp/sentry`
134+
135+
### List of MCP servers that don’t work with Gordon
136+
137+
These are the MCP servers that are currently unsupported
138+
139+
- `mcp/sequentialthinking` - The tool description is too long
140+
- `mcp/puppeteer` - Puppeteer sends back images and Gordon doesn’t know how to handle them, it only handles text responses from tools
141+
- `mcp/everart` - Everart sends back images and Gordon doesn’t know how to handle them, it only handles text responses from tools
142+
- `mcp/memory` - There is no way to configure the server to use a custom path for its knowledge base

content/manuals/security/for-admins/hardened-desktop/settings-management/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Using the `admin-settings.json` file, you can:
4545
- Turn off Docker Extensions
4646
- Turn off Docker Scout SBOM indexing
4747
- Turn off beta and experimental features
48-
- Turn off Docker AI ([Ask Gordon](../../../../desktop/features/gordon.md))
48+
- Turn off Docker AI ([Ask Gordon](../../../../desktop/features/gordon/_index.md))
4949
- Turn off Docker Desktop's onboarding survey
5050
- Control whether developers can use the Docker terminal
5151
- Control the file sharing implementation for your developers on macOS

0 commit comments

Comments
 (0)