|
| 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 |
0 commit comments