-
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🔧 feat: Initial MCP Support (Tools) #5015
Conversation
…ion and connection management
…improved accessibility
…dioOptionsSchema with additional properties
… domain extraction
…ove localization in ToolSelectDialog
…s, add missing types
…) and make transport type optional, infer based on other option fields
…ckoff and enhance transport debug logging
…nthropic dependency
* 📝 chore: Add comment to clarify purpose of check_updates.sh script * feat: mcp package * feat: add librechat-mcp package and update dependencies * feat: refactor MCPConnectionSingleton to handle transport initialization and connection management * feat: change private methods to public in MCPConnectionSingleton for improved accessibility * feat: filesystem demo * chore: everything demo and move everything under mcp workspace * chore: move ts-node to mcp workspace * feat: mcp examples * feat: working sse MCP example * refactor: rename MCPConnectionSingleton to MCPConnection for clarity * refactor: replace MCPConnectionSingleton with MCPConnection for consistency * refactor: manager/connections * refactor: update MCPConnection to use type definitions from mcp types * refactor: update MCPManager to use winston logger and enhance server initialization * refactor: share logger between connections and manager * refactor: add schema definitions and update MCPManager to accept logger parameter * feat: map available MCP tools * feat: load manifest tools * feat: add MCP tools delimiter constant and update plugin key generation * feat: call MCP tools * feat: update librechat-data-provider version to 0.7.63 and enhance StdioOptionsSchema with additional properties * refactor: simplify typing * chore: update types/packages * feat: MCP Tool Content parsing * chore: update dependencies and improve package configurations * feat: add 'mcp' directory to package and update configurations * refactor: return CONTENT_AND_ARTIFACT format for MCP callTool * chore: bump @librechat/agents * WIP: MCP artifacts * chore: bump @librechat/agents to v1.8.7 * fix: ensure filename has extension when saving base64 image * fix: move base64 buffer conversion before filename extension check * chore: update backend review workflow to install MCP package * fix: use correct `mime` method * fix: enhance file metadata with message and tool call IDs in image saving process * fix: refactor ToolCall component to handle MCP tool calls and improve domain extraction * fix: update ToolItem component for default isInstalled value and improve localization in ToolSelectDialog * fix: update ToolItem component to use consistent text color for tool description * style: add theming to ToolSelectDialog * fix: improve domain extraction logic in ToolCall component * refactor: conversation item theming, fix rename UI bug, optimize props, add missing types * feat: enhance MCP options schema with base options (iconPath to start) and make transport type optional, infer based on other option fields * fix: improve reconnection logic with parallel init and exponential backoff and enhance transport debug logging * refactor: improve logging format * refactor: improve logging of available tools by displaying tool names * refactor: improve reconnection/connection logic * feat: add MCP package build process to Dockerfile * feat: add fallback icon for tools without an image in ToolItem component * feat: Assistants Support for MCP Tools * fix(build): configure rollup to use output.dir for dynamic imports * chore: update @librechat/agents to version 1.8.8 and add @langchain/anthropic dependency * fix: update CONFIG_VERSION to 1.2.0
I've been using MCP with Claude Desktop a lot. It's nice to see it in LIbreChat. 👍 claude_desktop_config.json typically contains nothing other than MCP servers, so if the same .json format was supported we could just copy/paste our current MCP config into the LIbreChat dir (renaming it if necessary), or importing .json in the settings (like chat history.) I attached a bunch of MCP servers converted to .yaml (by Claude). The API keys are redacted, but it might be helpful to have a wider variety of examples. Btw, I updated to 0.7.6, but the librechat.yaml is still v1.1.5 (also in the repo.) I tried adding the mcp-servers to v1.1.5., but 18 of 20 failed according to Docker. |
I attempted to set this up on an Ubuntu server at home. While I successfully configured Librechat, the MCP tools did not set up properly. I managed to establish the filesystem MCP server, but when I tried to add another server, like the Todoist MCP server, it failed. I used the mcpServers:
todoist:
command: npx
args:
- -y
- "@abhiz123/todoist-mcp-server"
env:
TODOIST_API_TOKEN: "REPLACE_WITH_YOUR_API_TOKEN"
brave-search:
command: npx
args:
- -y
- "@modelcontextprotocol/server-brave-search"
env:
BRAVE_API_KEY: "REPLACE_WITH_YOUR_API_KEY"
filesystem:
command: npx
args:
- -y
- "@modelcontextprotocol/server-filesystem"
- "/Users/abe"
memory:
command: npx
args:
- -y
- "@modelcontextprotocol/server-memory"
github:
command: npx
args:
- -y
- "@modelcontextprotocol/server-github"
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "REPLACE_WITH_YOUR_PERSONAL_ACCESS_TOKEN"
mcp-installer:
command: npx
args:
- "@anaisbetts/mcp-installer"
markdown:
command: npx
args:
- -y
- "mcp-obsidian"
- "/Users/abe/Library/Mobile Documents/iCloud~md~obsidian/Documents/Vault"
puppeteer:
command: npx
args:
- -y
- "@modelcontextprotocol/server-puppeteer"
airtable:
command: npx
args:
- -y
- "airtable-mcp-server"
- "REPLACE_WITH_YOUR_AIRTABLE_API_KEY"
sequential-thinking:
command: npx
args:
- -y
- "@modelcontextprotocol/server-sequential-thinking"
playwright:
command: npx
args:
- -y
- "@executeautomation/playwright-mcp-server" |
@ThoughtPhotography appreciate the feedback. We will simply rely on the librechat.yaml file for now. I will see about using JSON from the frontend, though. |
@epaproditus open a troubleshooting discussion and post relevant logs. I’m locking discussion here since it’s easily missed and comments here are intended for the actual code. |
Summary
Initial Support for MCP, integrating tools to start, I will then move on to Resources, then Prompts.
Initial tool support is for Agents and Assistants API endpoints.
Note: Agents are recommended due to the ability to provide images from tool results directly to the LLM (Anthropic/OpenAI only).
Relevant issue: #4876
Change Type
Testing
Tested the following mcpServers config via
librechat.yaml
file:Checklist