diff --git a/clients.mdx b/clients.mdx
index 1c492d5..b2966c3 100644
--- a/clients.mdx
+++ b/clients.mdx
@@ -12,10 +12,12 @@ This page provides an overview of applications that support the Model Context Pr
| [Claude Desktop App][Claude] | ✅ | ✅ | ✅ | ❌ | ❌ | Full support for all MCP features |
| [Zed][Zed] | ❌ | ✅ | ❌ | ❌ | ❌ | Prompts appear as slash commands |
| [Sourcegraph Cody][Cody] | ✅ | ❌ | ❌ | ❌ | ❌ | Supports resources through OpenCTX |
+| [Firebase Genkit][Genkit] | ⚠️ | ✅ | ✅ | ❌ | ❌ | Supports resource list and lookup through tools. |
[Claude]: https://claude.ai/download
[Zed]: https://zed.dev
[Cody]: https://sourcegraph.com/cody
+[Genkit]: https://github.com/firebase/genkit
[Resources]: https://modelcontextprotocol.io/docs/concepts/resources
[Prompts]: https://modelcontextprotocol.io/docs/concepts/prompts
@@ -53,6 +55,15 @@ The Claude desktop application provides comprehensive support for MCP, enabling
- Uses OpenCTX as an abstraction layer
- Future support planned for additional MCP features
+### Firebase Genkit
+[Genkit](https://github.com/firebase/genkit) is Firebase's SDK for building and integrating GenAI features into applications. The [genkitx-mcp](https://github.com/firebase/genkit/tree/main/js/plugins/mcp) plugin enables consuming MCP servers as a client or creating MCP servers from Genkit tools and prompts.
+
+**Key features:**
+- Client support for tools and prompts (resources partially supported)
+- Rich discovery with support in Genkit's Dev UI playground
+- Seamless interoperability with Genkit's existing tools and prompts
+- Works across a wide variety of GenAI models from top providers
+
## Adding MCP support to your application
If you've added MCP support to your application, we encourage you to submit a pull request to add it to this list. MCP integration can provide your users with powerful contextual AI capabilities and make your application part of the growing MCP ecosystem.
diff --git a/docs/concepts/resources.mdx b/docs/concepts/resources.mdx
index d61722a..50eb8eb 100644
--- a/docs/concepts/resources.mdx
+++ b/docs/concepts/resources.mdx
@@ -7,8 +7,12 @@ Resources are a core primitive in the Model Context Protocol (MCP) that allow se
Resources are designed to be **application-controlled**, meaning that the client application can decide how and when they should be used.
+ Different MCP clients may handle resources differently. For example:
+ - Claude Desktop currently requires users to explicitly select resources before they can be used
+ - Other clients might automatically select resources based on heuristics
+ - Some implementations may even allow the AI model itself to determine which resources to use
- For example, one application may require users to explicitly select resources, while another could automatically select them based on heuristics or even at the discretion of the AI model itself.
+ Server authors should be prepared to handle any of these interaction patterns when implementing resource support. In order to expose data to models automatically, server authors should use a **model-controlled** primitive such as [Tools](./tools).
## Overview
diff --git a/docs/first-server/python.mdx b/docs/first-server/python.mdx
index 7a1c42c..2105ec1 100644
--- a/docs/first-server/python.mdx
+++ b/docs/first-server/python.mdx
@@ -477,7 +477,7 @@ Let's build your first MCP server in Python! We'll create a weather server that
## Available transports
-While this guide uses stdio transport, MCP supports additonal transport options:
+While this guide uses stdio transport, MCP supports additional transport options:
### SSE (Server-Sent Events)
@@ -638,18 +638,15 @@ uvicorn.run(app, host="0.0.0.0", port=8000)
```python
- @self.list_resources()
- async def list_resources(self) -> ListResourcesResult:
- return ListResourcesResult(
- resources=[...],
- resourceTemplates=[
- ResourceTemplate(
- uriTemplate="weather://{city}/current",
- name="Current weather for any city",
- mimeType="application/json"
- )
- ]
- )
+ @app.list_resource_templates()
+ async def list_resource_templates() -> list[ResourceTemplate]:
+ return [
+ ResourceTemplate(
+ uriTemplate="weather://{city}/current",
+ name="Current weather for any city",
+ mimeType="application/json"
+ )
+ ]
```
@@ -751,7 +748,7 @@ uvicorn.run(app, host="0.0.0.0", port=8000)
pass
def json(self):
- return nock_forecast_response
+ return mock_forecast_response
class AsyncClient():
def __aenter__(self):
diff --git a/docs/first-server/typescript.mdx b/docs/first-server/typescript.mdx
index 18354ac..0f39531 100644
--- a/docs/first-server/typescript.mdx
+++ b/docs/first-server/typescript.mdx
@@ -41,6 +41,10 @@ This guide uses the OpenWeatherMap API. You'll need a free API key from [OpenWea
```bash
OPENWEATHER_API_KEY=your-api-key-here
```
+ Make sure to add your environment file to `.gitignore`
+ ```bash
+ .env
+ ```
@@ -342,18 +346,18 @@ This guide uses the OpenWeatherMap API. You'll need a free API key from [OpenWea
}
return {
- content: {
- mimeType: "application/json",
+ content: [{
+ type: "text",
text: JSON.stringify(forecasts, null, 2)
- }
+ }]
};
} catch (error) {
if (axios.isAxiosError(error)) {
return {
- content: {
- mimeType: "text/plain",
+ content: [{
+ type: "text",
text: `Weather API error: ${error.response?.data.message ?? error.message}`
- },
+ }],
isError: true,
}
}
@@ -368,7 +372,6 @@ This guide uses the OpenWeatherMap API. You'll need a free API key from [OpenWea
```bash
npm run build
- npm link
```
@@ -383,7 +386,8 @@ This guide uses the OpenWeatherMap API. You'll need a free API key from [OpenWea
{
"mcpServers": {
"weather": {
- "command": "weather-server",
+ "command": "node",
+ "args": ["/path/to/weather-server/build/index.js"],
"env": {
"OPENWEATHER_API_KEY": "your-api-key",
}
@@ -561,7 +565,7 @@ npm run build
Look for detailed error messages in the Claude Desktop logs:
```bash
# Monitor logs
-tail -n 20 -f ~/Library/Application\ Support/Claude/mcp*.log
+tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
```
### Type errors