The most critical aspect of MCP security is trust. You should only connect your CrewAI agents to MCP servers that you fully trust.
When integrating external services like MCP (Model Context Protocol) servers into your CrewAI agents, security is paramount.
MCP servers can execute code, access data, or interact with other systems based on the tools they expose.
It’s crucial to understand the implications and follow best practices to protect your applications and data.
Before configuring MCPServerAdapter to connect to an MCP server, ensure you know:
Who operates the server? Is it a known, reputable service, or an internal server under your control?
What tools does it expose? Understand the capabilities of the tools. Could they be misused if an attacker gained control or if the server itself is malicious?
What data does it access or process? Be aware of any sensitive information that might be sent to or handled by the MCP server.
Avoid connecting to unknown or unverified MCP servers, especially if your agents handle sensitive tasks or data.
2. Secure Prompt Injection via Tool Metadata: The “Model Control Protocol” Risk
A significant and subtle risk is the potential for prompt injection through tool metadata. Here’s how it works:
When your CrewAI agent connects to an MCP server, it typically requests a list of available tools.
The MCP server responds with metadata for each tool, including its name, description, and parameter descriptions.
Your agent’s underlying Language Model (LLM) uses this metadata to understand how and when to use the tools. This metadata is often incorporated into the LLM’s system prompt or context.
A malicious MCP server can craft its tool metadata (names, descriptions) to include hidden or overt instructions. These instructions can act as a prompt injection, effectively telling your LLM to behave in a certain way, reveal sensitive information, or perform malicious actions.
Crucially, this attack can occur simply by connecting to a malicious server and listing its tools, even if your agent never explicitly decides to use any of those tools. The mere exposure to the malicious metadata can be enough to compromise the agent’s behavior.Mitigation:
Extreme Caution with Untrusted Servers: Reiterate: Do not connect to MCP servers you do not fully trust. The risk of metadata injection makes this paramount.
Stdio (Standard Input/Output) transport is typically used for local MCP servers running on the same machine as your CrewAI application.
Process Isolation: While generally safer as it doesn’t involve network exposure by default, ensure the script or command run by StdioServerParameters is from a trusted source and has appropriate file system permissions. A malicious Stdio server script could still harm your local system.
Input Sanitization: If your Stdio server script takes complex inputs derived from agent interactions, ensure the script itself sanitizes these inputs to prevent command injection or other vulnerabilities within the script’s logic.
Resource Limits: Be mindful that a local Stdio server process consumes local resources (CPU, memory). Ensure it’s well-behaved and won’t exhaust system resources.
The Confused Deputy Problem is a classic security vulnerability that can manifest in MCP integrations, especially when an MCP server acts as a proxy to other third-party services (e.g., Google Calendar, GitHub) that use OAuth 2.0 for authorization.Scenario:
An MCP server (let’s call it MCP-Proxy) allows your agent to interact with ThirdPartyAPI.
MCP-Proxy uses its own single, static client_id when talking to ThirdPartyAPI’s authorization server.
You, as the user, legitimately authorize MCP-Proxy to access ThirdPartyAPI on your behalf. During this, ThirdPartyAPI’s auth server might set a cookie in your browser indicating your consent for MCP-Proxy’s client_id.
An attacker crafts a malicious link. This link initiates an OAuth flow with MCP-Proxy, but is designed to trick ThirdPartyAPI’s auth server.
If you click this link, and ThirdPartyAPI’s auth server sees your existing consent cookie for MCP-Proxy’s client_id, it might skip asking for your consent again.
MCP-Proxy might then be tricked into forwarding an authorization code (for ThirdPartyAPI) to the attacker, or an MCP authorization code that the attacker can use to impersonate you to MCP-Proxy.
Mitigation (Primarily for MCP Server Developers):
MCP proxy servers using static client IDs for downstream services must obtain explicit user consent for each client application or agent connecting to them before initiating an OAuth flow with the third-party service. This means MCP-Proxy itself should show a consent screen.
CrewAI User Implication:
Be cautious if an MCP server redirects you for multiple OAuth authentications, especially if it seems unexpected or if the permissions requested are overly broad.
Prefer MCP servers that clearly delineate their own identity versus the third-party services they might proxy.
DNS rebinding allows an attacker-controlled website to bypass the same-origin policy and make requests to servers on the user’s local network (e.g., localhost) or intranet. This is particularly risky if you run an MCP server locally (e.g., for development) and an agent in a browser-like environment (though less common for typical CrewAI backend setups) or if the MCP server is on an internal network.Mitigation Strategies for MCP Server Implementers:
Validate Origin and Host Headers: MCP servers (especially SSE ones) should validate the Origin and/or Host HTTP headers to ensure requests are coming from expected domains/clients.
Bind to localhost (127.0.0.1): When running MCP servers locally for development, bind them to 127.0.0.1 instead of 0.0.0.0. This prevents them from being accessible from other machines on the network.
Authentication: Require authentication for all connections to your MCP server if it’s not intended for public anonymous access.
Encrypt Data in Transit: Always use HTTPS (HTTP Secure) for the URLs of remote MCP servers. This encrypts the communication between your CrewAI application and the MCP server, protecting against eavesdropping and man-in-the-middle attacks. MCPServerAdapter will respect the scheme (http or https) provided in the URL.
This is primarily a concern for MCP server developers but understanding it helps in choosing secure servers.“Token passthrough” is when an MCP server accepts an access token from your CrewAI agent (which might be a token for a different service, say ServiceA) and simply passes it through to another downstream API (ServiceB) without proper validation. Specifically, ServiceB (or the MCP server itself) should only accept tokens that were explicitly issued for them (i.e., the ‘audience’ claim in the token matches the server/service).Risks:
Bypasses security controls (like rate limiting or fine-grained permissions) on the MCP server or the downstream API.
Breaks audit trails and accountability.
Allows misuse of stolen tokens.
Mitigation (For MCP Server Developers):
MCP servers MUST NOT accept tokens that were not explicitly issued for them. They must validate the token’s audience claim.
CrewAI User Implication:
While not directly controllable by the user, this highlights the importance of connecting to well-designed MCP servers that adhere to security best practices.
Verify Identity: If the MCP server provides sensitive tools or access to private data, it MUST implement strong authentication mechanisms to verify the identity of the client (your CrewAI application). This could involve API keys, OAuth tokens, or other standard methods.
Principle of Least Privilege: Ensure the credentials used by MCPServerAdapter (if any) have only the necessary permissions to access the required tools.
Input Validation is Critical: MCP servers must rigorously validate all inputs received from agents before processing them or passing them to tools. This is a primary defense against many common vulnerabilities:
Command Injection: If a tool constructs shell commands, SQL queries, or other interpreted language statements based on input, the server must meticulously sanitize this input to prevent malicious commands from being injected and executed.
Path Traversal: If a tool accesses files based on input parameters, the server must validate and sanitize these paths to prevent access to unauthorized files or directories (e.g., by blocking ../ sequences).
Data Type & Range Checks: Servers must ensure that input data conforms to the expected data types (e.g., string, number, boolean) and falls within acceptable ranges or adheres to defined formats (e.g., regex for URLs).
JSON Schema Validation: All tool parameters should be strictly validated against their defined JSON schema. This helps catch malformed requests early.
Client-Side Awareness: While server-side validation is paramount, as a CrewAI user, be mindful of the data your agents are constructed to send to MCP tools, especially if interacting with less-trusted or new MCP servers.
Prevent Abuse: MCP servers should implement rate limiting to prevent abuse, whether intentional (Denial of Service attacks) or unintentional (e.g., a misconfigured agent making too many requests).
Client-Side Retries: Implement sensible retry logic in your CrewAI tasks if transient network issues or server rate limits are expected, but avoid aggressive retries that could exacerbate server load.
4. Secure MCP Server Implementation Advice (For Developers)
If you are developing an MCP server that CrewAI agents might connect to, consider these best practices in addition to the points above:
Follow Secure Coding Practices: Adhere to standard secure coding principles for your chosen language and framework (e.g., OWASP Top 10).
Principle of Least Privilege: Ensure the process running the MCP server (especially for Stdio) has only the minimum necessary permissions. Tools themselves should also operate with the least privilege required to perform their function.
Dependency Management: Keep all server-side dependencies, including operating system packages, language runtimes, and third-party libraries, up-to-date to patch known vulnerabilities. Use tools to scan for vulnerable dependencies.
Secure Defaults: Design your server and its tools to be secure by default. For example, features that could be risky should be off by default or require explicit opt-in with clear warnings.
Access Control for Tools: Implement robust mechanisms to control which authenticated and authorized agents or users can access specific tools, especially those that are powerful, sensitive, or incur costs.
Secure Error Handling: Servers should not expose detailed internal error messages, stack traces, or debugging information to the client, as these can reveal internal workings or potential vulnerabilities. Log errors comprehensively on the server-side for diagnostics.
Comprehensive Logging and Monitoring: Implement detailed logging of security-relevant events (e.g., authentication attempts, tool invocations, errors, authorization changes). Monitor these logs for suspicious activity or abuse patterns.
Regular Security Audits: If your MCP server handles sensitive data, performs critical operations, or is publicly exposed, consider periodic security audits by qualified professionals.
By understanding these security considerations and implementing best practices, you can safely leverage the power of MCP servers in your CrewAI projects.
These are by no means exhaustive, but they cover the most common and critical security concerns.
The threats will continue to evolve, so it’s important to stay informed and adapt your security measures accordingly.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"CrewAI","colors":{"primary":"#EB6658","light":"#F3A78B","dark":"#C94C3C"},"logo":{"light":"https://mintcdn.com/crewai/5SZbe87tsCWZY09V/images/crew_only_logo.png?fit=max\u0026auto=format\u0026n=5SZbe87tsCWZY09V\u0026q=85\u0026s=439ca5dc63a1768cad7196005ff5636f","dark":"https://mintcdn.com/crewai/5SZbe87tsCWZY09V/images/crew_only_logo.png?fit=max\u0026auto=format\u0026n=5SZbe87tsCWZY09V\u0026q=85\u0026s=439ca5dc63a1768cad7196005ff5636f"},"favicon":"https://mintcdn.com/crewai/sz5CkjPWxVjBAZE7/images/favicon.svg?fit=max\u0026auto=format\u0026n=sz5CkjPWxVjBAZE7\u0026q=85\u0026s=16c03dad58d05417a2e442ff942d2ce7","api":{"playground":{}},"appearance":{"default":"system","strict":false},"background":{"decoration":"grid"},"navbar":{"links":[{"icon":"arrow-up-right-from-square","href":"https://app.crewai.com","label":"Start Cloud Trial"}],"primary":{"type":"github","href":"https://github.com/crewAIInc/crewAI"}},"footer":{"socials":{"website":"https://crewai.com","x":"https://x.com/crewAIInc","github":"https://github.com/crewAIInc/crewAI","linkedin":"https://www.linkedin.com/company/crewai-inc","youtube":"https://youtube.com/@crewAIInc","reddit":"https://www.reddit.com/r/crewAIInc"}},"seo":{"metatags":{"og:type":"website","og:site_name":"CrewAI Documentation","og:image":"https://docs.crewai.com/images/crew_only_logo.png","twitter:card":"summary_large_image","twitter:site":"@crewAIInc","keywords":"AI agents, multi-agent systems, CrewAI, artificial intelligence, automation, Python framework, agent collaboration, AI workflows"}},"fonts":{"family":"Inter"},"errors":{"404":{"redirect":true}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode",{"title":"Request a feature","description":"Join the discussion on GitHub to request a new feature","icon":"plus","href":"https://github.com/crewAIInc/crewAI/issues/new/choose"}],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","href":""},{"language":"pt-BR","href":"edge/pt-BR"},{"language":"ko","href":"edge/ko"},{"language":"ar","href":"edge/ar"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"crewai","hasAudioNarration":false,"actualSubdomain":"crewai","customDomains":["docs.crewai.com"],"gitSource":{"type":"github","owner":"crewaiinc","repo":"crewai","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae109ca5ecac0fee57e8e08","collectionId":"77f99dff-8c93-4576-a183-fbdacc92ce2c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae109ca5ecac0fee57e8e08"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae109ca5ecac0fee57e8e08","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"en","tag":"Documentation","count":8428},{"language":"ko","tag":"기술 문서","count":7754},{"language":"pt-BR","tag":"Documentação","count":7187},{"language":"ar","tag":"التقنية التوثيق","count":7154},{"language":"en","tag":"Tools","count":3870},{"language":"ko","tag":"도구 (Tools)","count":3579},{"language":"ar","tag":"الأدوات","count":3336},{"language":"pt-BR","tag":"Ferramentas","count":3057},{"language":"en","tag":"Learn","count":1345},{"language":"ko","tag":"학습","count":1199},{"language":"pt-BR","tag":"Aprenda","count":1199},{"language":"ar","tag":"التعلّم","count":1103},{"language":"en","tag":"Core Concepts","count":1019},{"language":"ko","tag":"핵심 개념","count":989},{"language":"pt-BR","tag":"Conceitos-Chave","count":989},{"language":"ar","tag":"المفاهيم الأساسية","count":917},{"language":"en","tag":"Observability","count":864},{"language":"en","tag":"Search \u0026 Research","count":840},{"language":"ko","tag":"Observability","count":816},{"language":"pt-BR","tag":"Observabilidade","count":816},{"language":"en","tag":"Guides","count":808},{"language":"ko","tag":"검색 및 연구","count":804},{"language":"ar","tag":"Observability","count":748},{"language":"ar","tag":"البحث والاستكشاف","count":740},{"language":"en","tag":"Web Scraping \u0026 Browsing","count":708},{"language":"en","tag":"File \u0026 Document","count":672},{"language":"ko","tag":"파일 \u0026 문서","count":672},{"language":"ko","tag":"웹 스크래핑 \u0026 브라우징","count":672},{"language":"pt-BR","tag":"Web Scraping \u0026 Navegação","count":624},{"language":"ar","tag":"الملفات والمستندات","count":616},{"language":"ar","tag":"استخراج بيانات الويب","count":616},{"language":"pt-BR","tag":"Arquivo \u0026 Documento","count":576},{"language":"ko","tag":"가이드","count":567},{"language":"pt-BR","tag":"Guias","count":567},{"language":"ar","tag":"الأدلّة","count":534},{"language":"pt-BR","tag":"Pesquisa","count":480},{"language":"ko","tag":"시작 안내","count":460},{"language":"pt-BR","tag":"Começando","count":460},{"language":"en","tag":"AI \u0026 Machine Learning","count":456},{"language":"ar","tag":"البدء","count":428}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v1.15.24/en/mcp/security","slug":"/v1.15.24/en/mcp/security","pageMetadata":{"title":"MCP Security Considerations","description":"Learn about important security best practices when integrating MCP servers with your CrewAI agents.","icon":"lock","mode":"wide","href":"/v1.15.24/en/mcp/security"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The most critical aspect of MCP security is `,_jsx(_components.strong,{children:`trust`}),`. You should `,_jsx(_components.strong,{children:`only`}),` connect your CrewAI agents to MCP servers that you fully trust.`]})}),`\n`,_jsx(_components.p,{children:`When integrating external services like MCP (Model Context Protocol) servers into your CrewAI agents, security is paramount.\nMCP servers can execute code, access data, or interact with other systems based on the tools they expose.\nIt’s crucial to understand the implications and follow best practices to protect your applications and data.`}),`\n`,_jsx(Heading,{level:`3`,id:`risks`,children:`Risks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Execute arbitrary code on the machine where the agent is running (especially with `,_jsx(_components.code,{children:`Stdio`}),` transport if the server can control the command executed).`]}),`\n`,_jsx(_components.li,{children:`Expose sensitive data from your agent or its environment.`}),`\n`,_jsx(_components.li,{children:`Manipulate your agent’s behavior in unintended ways, including making unauthorized API calls on your behalf.`}),`\n`,_jsx(_components.li,{children:`Hijack your agent’s reasoning process through sophisticated prompt injection techniques (see below).`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`1-trusting-mcp-servers`,children:`1. Trusting MCP Servers`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:_jsx(_components.strong,{children:`Only connect to MCP servers that you trust.`})})}),`\n`,_jsxs(_components.p,{children:[`Before configuring `,_jsx(_components.code,{children:`MCPServerAdapter`}),` to connect to an MCP server, ensure you know:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Who operates the server?`}),` Is it a known, reputable service, or an internal server under your control?`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`What tools does it expose?`}),` Understand the capabilities of the tools. Could they be misused if an attacker gained control or if the server itself is malicious?`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`What data does it access or process?`}),` Be aware of any sensitive information that might be sent to or handled by the MCP server.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Avoid connecting to unknown or unverified MCP servers, especially if your agents handle sensitive tasks or data.`}),`\n`,_jsx(Heading,{level:`3`,id:`2-secure-prompt-injection-via-tool-metadata-the-“model-control-protocol”-risk`,children:`2. Secure Prompt Injection via Tool Metadata: The “Model Control Protocol” Risk`}),`\n`,_jsx(_components.p,{children:`A significant and subtle risk is the potential for prompt injection through tool metadata. Here’s how it works:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`When your CrewAI agent connects to an MCP server, it typically requests a list of available tools.`}),`\n`,_jsx(_components.li,{children:`The MCP server responds with metadata for each tool, including its name, description, and parameter descriptions.`}),`\n`,_jsx(_components.li,{children:`Your agent’s underlying Language Model (LLM) uses this metadata to understand how and when to use the tools. This metadata is often incorporated into the LLM’s system prompt or context.`}),`\n`,_jsx(_components.li,{children:`A malicious MCP server can craft its tool metadata (names, descriptions) to include hidden or overt instructions. These instructions can act as a prompt injection, effectively telling your LLM to behave in a certain way, reveal sensitive information, or perform malicious actions.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Crucially, this attack can occur simply by connecting to a malicious server and listing its tools, even if your agent never explicitly decides to `,_jsx(_components.em,{children:`use`}),` any of those tools.`]}),` The mere exposure to the malicious metadata can be enough to compromise the agent’s behavior.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Mitigation:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Extreme Caution with Untrusted Servers:`}),` Reiterate: `,_jsx(_components.em,{children:`Do not connect to MCP servers you do not fully trust.`}),` The risk of metadata injection makes this paramount.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`stdio-transport-security`,children:`Stdio Transport Security`}),`\n`,_jsx(_components.p,{children:`Stdio (Standard Input/Output) transport is typically used for local MCP servers running on the same machine as your CrewAI application.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Process Isolation`}),`: While generally safer as it doesn’t involve network exposure by default, ensure the script or command run by `,_jsx(_components.code,{children:`StdioServerParameters`}),` is from a trusted source and has appropriate file system permissions. A malicious Stdio server script could still harm your local system.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Input Sanitization`}),`: If your Stdio server script takes complex inputs derived from agent interactions, ensure the script itself sanitizes these inputs to prevent command injection or other vulnerabilities within the script’s logic.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Resource Limits`}),`: Be mindful that a local Stdio server process consumes local resources (CPU, memory). Ensure it’s well-behaved and won’t exhaust system resources.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`confused-deputy-attacks`,children:`Confused Deputy Attacks`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Confused_deputy_problem`,children:`Confused Deputy Problem`}),` is a classic security vulnerability that can manifest in MCP integrations, especially when an MCP server acts as a proxy to other third-party services (e.g., Google Calendar, GitHub) that use OAuth 2.0 for authorization.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Scenario:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`An MCP server (let’s call it `,_jsx(_components.code,{children:`MCP-Proxy`}),`) allows your agent to interact with `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MCP-Proxy`}),` uses its own single, static `,_jsx(_components.code,{children:`client_id`}),` when talking to `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`’s authorization server.`]}),`\n`,_jsxs(_components.li,{children:[`You, as the user, legitimately authorize `,_jsx(_components.code,{children:`MCP-Proxy`}),` to access `,_jsx(_components.code,{children:`ThirdPartyAPI`}),` on your behalf. During this, `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`’s auth server might set a cookie in your browser indicating your consent for `,_jsx(_components.code,{children:`MCP-Proxy`}),`’s `,_jsx(_components.code,{children:`client_id`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`An attacker crafts a malicious link. This link initiates an OAuth flow with `,_jsx(_components.code,{children:`MCP-Proxy`}),`, but is designed to trick `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`’s auth server.`]}),`\n`,_jsxs(_components.li,{children:[`If you click this link, and `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`’s auth server sees your existing consent cookie for `,_jsx(_components.code,{children:`MCP-Proxy`}),`’s `,_jsx(_components.code,{children:`client_id`}),`, it might `,_jsx(_components.em,{children:`skip`}),` asking for your consent again.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MCP-Proxy`}),` might then be tricked into forwarding an authorization code (for `,_jsx(_components.code,{children:`ThirdPartyAPI`}),`) to the attacker, or an MCP authorization code that the attacker can use to impersonate you to `,_jsx(_components.code,{children:`MCP-Proxy`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Mitigation (Primarily for MCP Server Developers):`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`MCP proxy servers using static client IDs for downstream services `,_jsx(_components.strong,{children:`must`}),` obtain explicit user consent for `,_jsx(_components.em,{children:`each client application or agent`}),` connecting to them `,_jsx(_components.em,{children:`before`}),` initiating an OAuth flow with the third-party service. This means `,_jsx(_components.code,{children:`MCP-Proxy`}),` itself should show a consent screen.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`CrewAI User Implication:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Be cautious if an MCP server redirects you for multiple OAuth authentications, especially if it seems unexpected or if the permissions requested are overly broad.`}),`\n`,_jsx(_components.li,{children:`Prefer MCP servers that clearly delineate their own identity versus the third-party services they might proxy.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`remote-transport-security-sse-\u0026-streamable-http`,children:`Remote Transport Security (SSE \u0026 Streamable HTTP)`}),`\n`,_jsx(_components.p,{children:`When connecting to remote MCP servers via Server-Sent Events (SSE) or Streamable HTTP, standard web security practices are essential.`}),`\n`,_jsx(Heading,{level:`3`,id:`sse-security-considerations`,children:`SSE Security Considerations`}),`\n`,_jsx(Heading,{level:`3`,id:`a-dns-rebinding-attacks-especially-for-sse`,children:`a. DNS Rebinding Attacks (Especially for SSE)`}),`\n`,`\n`,_jsxs(_components.p,{children:[`DNS rebinding allows an attacker-controlled website to bypass the same-origin policy and make requests to servers on the user’s local network (e.g., `,_jsx(_components.code,{children:`localhost`}),`) or intranet. This is particularly risky if you run an MCP server locally (e.g., for development) and an agent in a browser-like environment (though less common for typical CrewAI backend setups) or if the MCP server is on an internal network.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Mitigation Strategies for MCP Server Implementers:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Validate `,_jsx(_components.code,{children:`Origin`}),` and `,_jsx(_components.code,{children:`Host`}),` Headers`]}),`: MCP servers (especially SSE ones) should validate the `,_jsx(_components.code,{children:`Origin`}),` and/or `,_jsx(_components.code,{children:`Host`}),` HTTP headers to ensure requests are coming from expected domains/clients.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Bind to `,_jsx(_components.code,{children:`localhost`}),` (127.0.0.1)`]}),`: When running MCP servers locally for development, bind them to `,_jsx(_components.code,{children:`127.0.0.1`}),` instead of `,_jsx(_components.code,{children:`0.0.0.0`}),`. This prevents them from being accessible from other machines on the network.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Authentication`}),`: Require authentication for all connections to your MCP server if it’s not intended for public anonymous access.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`b-use-https`,children:`b. Use HTTPS`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Encrypt Data in Transit`}),`: Always use HTTPS (HTTP Secure) for the URLs of remote MCP servers. This encrypts the communication between your CrewAI application and the MCP server, protecting against eavesdropping and man-in-the-middle attacks. `,_jsx(_components.code,{children:`MCPServerAdapter`}),` will respect the scheme (`,_jsx(_components.code,{children:`http`}),` or `,_jsx(_components.code,{children:`https`}),`) provided in the URL.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`c-token-passthrough-anti-pattern`,children:`c. Token Passthrough (Anti-Pattern)`}),`\n`,_jsx(_components.p,{children:`This is primarily a concern for MCP server developers but understanding it helps in choosing secure servers.`}),`\n`,_jsxs(_components.p,{children:[`“Token passthrough” is when an MCP server accepts an access token from your CrewAI agent (which might be a token for a `,_jsx(_components.em,{children:`different`}),` service, say `,_jsx(_components.code,{children:`ServiceA`}),`) and simply passes it through to another downstream API (`,_jsx(_components.code,{children:`ServiceB`}),`) without proper validation. Specifically, `,_jsx(_components.code,{children:`ServiceB`}),` (or the MCP server itself) should only accept tokens that were explicitly issued `,_jsx(_components.em,{children:`for them`}),` (i.e., the ‘audience’ claim in the token matches the server/service).`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Risks:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Bypasses security controls (like rate limiting or fine-grained permissions) on the MCP server or the downstream API.`}),`\n`,_jsx(_components.li,{children:`Breaks audit trails and accountability.`}),`\n`,_jsx(_components.li,{children:`Allows misuse of stolen tokens.`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Mitigation (For MCP Server Developers):`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`MCP servers `,_jsx(_components.strong,{children:`MUST NOT`}),` accept tokens that were not explicitly issued for them. They must validate the token’s audience claim.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`CrewAI User Implication:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`While not directly controllable by the user, this highlights the importance of connecting to well-designed MCP servers that adhere to security best practices.`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`authentication-and-authorization`,children:`Authentication and Authorization`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verify Identity`}),`: If the MCP server provides sensitive tools or access to private data, it MUST implement strong authentication mechanisms to verify the identity of the client (your CrewAI application). This could involve API keys, OAuth tokens, or other standard methods.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Principle of Least Privilege`}),`: Ensure the credentials used by `,_jsx(_components.code,{children:`MCPServerAdapter`}),` (if any) have only the necessary permissions to access the required tools.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`d-input-validation-and-sanitization`,children:`d. Input Validation and Sanitization`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Input Validation is Critical`}),`: MCP servers `,_jsx(_components.strong,{children:`must`}),` rigorously validate all inputs received from agents `,_jsx(_components.em,{children:`before`}),` processing them or passing them to tools. This is a primary defense against many common vulnerabilities:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Command Injection:`}),` If a tool constructs shell commands, SQL queries, or other interpreted language statements based on input, the server must meticulously sanitize this input to prevent malicious commands from being injected and executed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Path Traversal:`}),` If a tool accesses files based on input parameters, the server must validate and sanitize these paths to prevent access to unauthorized files or directories (e.g., by blocking `,_jsx(_components.code,{children:`../`}),` sequences).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Data Type \u0026 Range Checks:`}),` Servers must ensure that input data conforms to the expected data types (e.g., string, number, boolean) and falls within acceptable ranges or adheres to defined formats (e.g., regex for URLs).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`JSON Schema Validation:`}),` All tool parameters should be strictly validated against their defined JSON schema. This helps catch malformed requests early.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Client-Side Awareness`}),`: While server-side validation is paramount, as a CrewAI user, be mindful of the data your agents are constructed to send to MCP tools, especially if interacting with less-trusted or new MCP servers.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`e-rate-limiting-and-resource-management`,children:`e. Rate Limiting and Resource Management`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Prevent Abuse`}),`: MCP servers should implement rate limiting to prevent abuse, whether intentional (Denial of Service attacks) or unintentional (e.g., a misconfigured agent making too many requests).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Client-Side Retries`}),`: Implement sensible retry logic in your CrewAI tasks if transient network issues or server rate limits are expected, but avoid aggressive retries that could exacerbate server load.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-secure-mcp-server-implementation-advice-for-developers`,children:`4. Secure MCP Server Implementation Advice (For Developers)`}),`\n`,_jsx(_components.p,{children:`If you are developing an MCP server that CrewAI agents might connect to, consider these best practices in addition to the points above:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Follow Secure Coding Practices`}),`: Adhere to standard secure coding principles for your chosen language and framework (e.g., OWASP Top 10).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Principle of Least Privilege`}),`: Ensure the process running the MCP server (especially for `,_jsx(_components.code,{children:`Stdio`}),`) has only the minimum necessary permissions. Tools themselves should also operate with the least privilege required to perform their function.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Dependency Management`}),`: Keep all server-side dependencies, including operating system packages, language runtimes, and third-party libraries, up-to-date to patch known vulnerabilities. Use tools to scan for vulnerable dependencies.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secure Defaults`}),`: Design your server and its tools to be secure by default. For example, features that could be risky should be off by default or require explicit opt-in with clear warnings.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Access Control for Tools`}),`: Implement robust mechanisms to control which authenticated and authorized agents or users can access specific tools, especially those that are powerful, sensitive, or incur costs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secure Error Handling`}),`: Servers should not expose detailed internal error messages, stack traces, or debugging information to the client, as these can reveal internal workings or potential vulnerabilities. Log errors comprehensively on the server-side for diagnostics.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Comprehensive Logging and Monitoring`}),`: Implement detailed logging of security-relevant events (e.g., authentication attempts, tool invocations, errors, authorization changes). Monitor these logs for suspicious activity or abuse patterns.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Adherence to MCP Authorization Spec`}),`: If implementing authentication and authorization, strictly follow the `,_jsx(_components.a,{href:`https://modelcontextprotocol.io/specification/draft/basic/authorization`,children:`MCP Authorization specification`}),` and relevant `,_jsx(_components.a,{href:`https://datatracker.ietf.org/doc/html/rfc9700`,children:`OAuth 2.0 security best practices`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Regular Security Audits`}),`: If your MCP server handles sensitive data, performs critical operations, or is publicly exposed, consider periodic security audits by qualified professionals.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`5-further-reading`,children:`5. Further Reading`}),`\n`,_jsx(_components.p,{children:`For more detailed information on MCP security, refer to the official documentation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:_jsx(_components.a,{href:`https://modelcontextprotocol.io/docs/concepts/transports#security-considerations`,children:`MCP Transport Security`})})}),`\n`]}),`\n`,_jsx(_components.p,{children:`By understanding these security considerations and implementing best practices, you can safely leverage the power of MCP servers in your CrewAI projects.\nThese are by no means exhaustive, but they cover the most common and critical security concerns.\nThe threats will continue to evolve, so it’s important to stay informed and adapt your security measures accordingly.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"MCP Security Considerations","description":"Learn about important security best practices when integrating MCP servers with your CrewAI agents.","icon":"lock","mode":"wide","href":"/v1.15.24/en/mcp/security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[{"title":"Risks","slug":"risks","depth":3,"children":[]},{"title":"1. Trusting MCP Servers","slug":"1-trusting-mcp-servers","depth":3,"children":[]},{"title":"2. Secure Prompt Injection via Tool Metadata: The “Model Control Protocol” Risk","slug":"2-secure-prompt-injection-via-tool-metadata-the-“model-control-protocol”-risk","depth":3,"children":[]},{"title":"Stdio Transport Security","slug":"stdio-transport-security","depth":3,"children":[]},{"title":"Confused Deputy Attacks","slug":"confused-deputy-attacks","depth":3,"children":[]},{"title":"Remote Transport Security (SSE \u0026 Streamable HTTP)","slug":"remote-transport-security-sse-\u0026-streamable-http","depth":3,"children":[]},{"title":"SSE Security Considerations","slug":"sse-security-considerations","depth":3,"children":[]},{"title":"a. DNS Rebinding Attacks (Especially for SSE)","slug":"a-dns-rebinding-attacks-especially-for-sse","depth":3,"children":[]},{"title":"b. Use HTTPS","slug":"b-use-https","depth":3,"children":[]},{"title":"c. Token Passthrough (Anti-Pattern)","slug":"c-token-passthrough-anti-pattern","depth":3,"children":[]},{"title":"Authentication and Authorization","slug":"authentication-and-authorization","depth":4,"children":[]},{"title":"d. Input Validation and Sanitization","slug":"d-input-validation-and-sanitization","depth":3,"children":[]},{"title":"e. Rate Limiting and Resource Management","slug":"e-rate-limiting-and-resource-management","depth":3,"children":[]}]},{"title":"4. Secure MCP Server Implementation Advice (For Developers)","slug":"4-secure-mcp-server-implementation-advice-for-developers","depth":2,"children":[]},{"title":"5. Further Reading","slug":"5-further-reading","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/crewai/cc0a0a5c2c93f4d8/common-room-tracking.js","/_mintlify/custom/crewai/36c44d75a9111b06/reo-tracking.js"],"subdomain":"crewai","siteName":"CrewAI","title":"MCP Security Considerations - CrewAI","navMaps":{"firstHrefInVersion":{"Edge":{"href":"/edge/en/mcp/security","matchLevel":1},"v1.15.30":{"href":"/v1.15.30/en/mcp/security","matchLevel":1},"v1.15.29":{"href":"/v1.15.29/en/mcp/security","matchLevel":1},"v1.15.28":{"href":"/v1.15.28/en/mcp/security","matchLevel":1},"v1.15.27":{"href":"/v1.15.27/en/mcp/security","matchLevel":1},"v1.15.26":{"href":"/v1.15.26/en/mcp/security","matchLevel":1},"v1.15.25":{"href":"/v1.15.25/en/mcp/security","matchLevel":1},"v1.15.24":{"href":"/v1.15.24/en/mcp/security","matchLevel":0},"v1.15.23":{"href":"/v1.15.23/en/mcp/security","matchLevel":1},"v1.15.22":{"href":"/v1.15.22/en/mcp/security","matchLevel":1},"v1.15.21":{"href":"/v1.15.21/en/mcp/security","matchLevel":1},"v1.15.20":{"href":"/v1.15.20/en/mcp/security","matchLevel":1},"v1.15.19":{"href":"/v1.15.19/en/mcp/security","matchLevel":1},"v1.15.18":{"href":"/v1.15.18/en/mcp/security","matchLevel":1},"v1.15.17":{"href":"/v1.15.17/en/mcp/security","matchLevel":1},"v1.15.16":{"href":"/v1.15.16/en/mcp/security","matchLevel":1},"v1.15.15":{"href":"/v1.15.15/en/mcp/security","matchLevel":1},"v1.15.14":{"href":"/v1.15.14/en/mcp/security","matchLevel":1},"v1.15.13":{"href":"/v1.15.13/en/mcp/security","matchLevel":1},"v1.15.12":{"href":"/v1.15.12/en/mcp/security","matchLevel":1},"v1.15.11":{"href":"/v1.15.11/en/mcp/security","matchLevel":1},"v1.15.10":{"href":"/v1.15.10/en/mcp/security","matchLevel":1},"v1.15.9":{"href":"/v1.15.9/en/mcp/security","matchLevel":1},"v1.15.8":{"href":"/v1.15.8/en/mcp/security","matchLevel":1},"v1.15.7":{"href":"/v1.15.7/en/mcp/security","matchLevel":1},"v1.15.6":{"href":"/v1.15.6/en/mcp/security","matchLevel":1},"v1.15.5":{"href":"/v1.15.5/en/mcp/security","matchLevel":1},"v1.15.4":{"href":"/v1.15.4/en/mcp/security","matchLevel":1},"v1.15.3":{"href":"/v1.15.3/en/mcp/security","matchLevel":1},"v1.15.2":{"href":"/v1.15.2/en/mcp/security","matchLevel":1},"v1.15.1":{"href":"/v1.15.1/en/mcp/security","matchLevel":1},"v1.15.0":{"href":"/v1.15.0/en/mcp/security","matchLevel":1},"v1.14.7":{"href":"/v1.14.7/en/mcp/security","matchLevel":1},"v1.14.6":{"href":"/v1.14.6/en/mcp/security","matchLevel":1},"v1.14.5":{"href":"/v1.14.5/en/mcp/security","matchLevel":1},"v1.14.4":{"href":"/v1.14.4/en/mcp/security","matchLevel":1},"v1.14.3":{"href":"/v1.14.3/en/mcp/security","matchLevel":1},"v1.14.2":{"href":"/v1.14.2/en/mcp/security","matchLevel":1},"v1.14.1":{"href":"/v1.14.1/en/mcp/security","matchLevel":1},"v1.14.0":{"href":"/v1.14.0/en/mcp/security","matchLevel":1},"v1.13.0":{"href":"/v1.13.0/en/mcp/security","matchLevel":1},"v1.12.2":{"href":"/v1.12.2/en/mcp/security","matchLevel":1},"v1.12.1":{"href":"/v1.12.1/en/mcp/security","matchLevel":1},"v1.12.0":{"href":"/v1.12.0/en/mcp/security","matchLevel":1},"v1.11.1":{"href":"/v1.11.1/en/mcp/security","matchLevel":1},"v1.11.0":{"href":"/v1.11.0/en/mcp/security","matchLevel":1},"v1.10.1":{"href":"/v1.10.1/en/mcp/security","matchLevel":1},"v1.10.0":{"href":"/v1.10.0/en/mcp/security","matchLevel":1}},"firstHrefInLanguage":{"en":{"href":"/v1.15.24/en/mcp/security","matchLevel":0},"pt-BR":{"href":"/v1.15.24/pt-BR/mcp/security","matchLevel":1},"ko":{"href":"/v1.15.24/ko/mcp/security","matchLevel":1},"ar":{"href":"/v1.15.24/ar/mcp/security","matchLevel":1}}},"lastModified":"2026-10-07T18:01:31.329Z","originalFileLocation":"v1.15.24/en/mcp/security.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\">\u003cmeta data-mint-head name=\"keywords\" content=\"AI agents, multi-agent systems, CrewAI, artificial intelligence, automation, Python framework, agent collaboration, AI workflows\">\u003cmeta data-mint-head name=\"application-name\" content=\"CrewAI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"MCP Security Considerations - CrewAI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CrewAI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.crewai.com/v1.15.24/en/mcp/security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.crewai.com/images/crew_only_logo.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"MCP Security Considerations - CrewAI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.crewai.com/images/crew_only_logo.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/crewai/4u_yrBmnBvL-de5g/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CrewAI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#EB6658\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.crewai.com/v1.15.24/en/mcp/security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v1.15.24/en/mcp/security.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.crewai.com/v1.15.24/en/mcp/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.crewai.com/v1.15.24/pt-BR/mcp/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.crewai.com/v1.15.24/ko/mcp/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://docs.crewai.com/v1.15.24/ar/mcp/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.crewai.com/v1.15.24/en/mcp/security\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.crewai.com/#organization\",\"name\":\"CrewAI\",\"url\":\"https://docs.crewai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/crewai/5SZbe87tsCWZY09V/images/crew_only_logo.png?fit=max\u0026auto=format\u0026n=5SZbe87tsCWZY09V\u0026q=85\u0026s=439ca5dc63a1768cad7196005ff5636f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.crewai.com#website\",\"name\":\"CrewAI\",\"url\":\"https://docs.crewai.com\",\"publisher\":{\"@id\":\"https://docs.crewai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.crewai.com/v1.15.24/en/mcp/security#webpage\",\"url\":\"https://docs.crewai.com/v1.15.24/en/mcp/security\",\"name\":\"MCP Security Considerations\",\"description\":\"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\",\"dateModified\":\"2026-10-07T18:01:31.329Z\",\"isPartOf\":{\"@id\":\"https://docs.crewai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.crewai.com/v1.15.24/en/mcp/security#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.crewai.com/v1.15.24/en/mcp/security#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MCP Integration\",\"item\":\"https://docs.crewai.com/v1.15.24/en/mcp/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MCP Security Considerations\",\"item\":\"https://docs.crewai.com/v1.15.24/en/mcp/security\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.crewai.com/v1.15.24/en/mcp/security#article\",\"headline\":\"MCP Security Considerations\",\"name\":\"MCP Security Considerations\",\"description\":\"Learn about important security best practices when integrating MCP servers with your CrewAI agents.\",\"url\":\"https://docs.crewai.com/v1.15.24/en/mcp/security\",\"mainEntityOfPage\":{\"@id\":\"https://docs.crewai.com/v1.15.24/en/mcp/security#webpage\"},\"image\":\"https://docs.crewai.com/images/crew_only_logo.png\",\"dateModified\":\"2026-10-07T18:01:31.329Z\",\"publisher\":{\"@id\":\"https://docs.crewai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.crewai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CrewAI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CrewAI","nav":{"global":null,"languages":[{"language":"en","versions":[{"version":"Edge","tag":"Edge","pages":[{"title":"Edge","href":"/edge/en/mcp/security"}]},{"version":"v1.15.30","default":true,"tag":"Latest","pages":[{"title":"v1.15.30","href":"/v1.15.30/en/mcp/security"}]},{"version":"v1.15.29","pages":[{"title":"v1.15.29","href":"/v1.15.29/en/mcp/security"}]},{"version":"v1.15.28","pages":[{"title":"v1.15.28","href":"/v1.15.28/en/mcp/security"}]},{"version":"v1.15.27","pages":[{"title":"v1.15.27","href":"/v1.15.27/en/mcp/security"}]},{"version":"v1.15.26","pages":[{"title":"v1.15.26","href":"/v1.15.26/en/mcp/security"}]},{"version":"v1.15.25","pages":[{"title":"v1.15.25","href":"/v1.15.25/en/mcp/security"}]},{"version":"v1.15.24","tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Documentation","icon":"book-open","groups":[{"group":"Get Started","pages":[{"title":"Introduction","icon":"handshake","mode":"wide","href":"/v1.15.24/en/introduction"},{"title":"Build with AI","icon":"robot","mode":"wide","href":"/v1.15.24/en/guides/coding-tools/build-with-ai"},{"title":"Skills","icon":"wand-magic-sparkles","mode":"wide","href":"/v1.15.24/en/skills"},{"title":"Installation","icon":"wrench","mode":"wide","href":"/v1.15.24/en/installation"},{"title":"Quickstart","icon":"rocket","mode":"wide","href":"/v1.15.24/en/quickstart"}]},{"group":"Guides","pages":[{"group":"Strategy","icon":"compass","pages":[{"title":"Evaluating Use Cases for CrewAI","icon":"scale-balanced","mode":"wide","href":"/v1.15.24/en/guides/concepts/evaluating-use-cases"}]},{"group":"Agents","icon":"user","pages":[{"title":"Crafting Effective Agents","icon":"robot","mode":"wide","href":"/v1.15.24/en/guides/agents/crafting-effective-agents"}]},{"group":"Crews","icon":"users","pages":[{"title":"Build Your First Crew","icon":"users-gear","mode":"wide","href":"/v1.15.24/en/guides/crews/first-crew"}]},{"group":"Flows","icon":"code-branch","pages":[{"title":"Build Your First Flow","icon":"diagram-project","mode":"wide","href":"/v1.15.24/en/guides/flows/first-flow"},{"title":"Mastering Flow State Management","icon":"diagram-project","mode":"wide","href":"/v1.15.24/en/guides/flows/mastering-flow-state"},{"title":"Conversational Flows","icon":"comments","mode":"wide","href":"/v1.15.24/en/guides/flows/conversational-flows"},{"title":"Migrating from inputs.id to restore_from_state_id","icon":"arrow-right-arrow-left","href":"/v1.15.24/en/guides/flows/inputs-id-deprecation"}]},{"group":"Frontend","icon":"browser","pages":[{"title":"Frontend Overview","icon":"browser","mode":"wide","href":"/v1.15.24/en/guides/frontend/overview"},{"title":"Conversational Flows","icon":"comments","mode":"wide","href":"/v1.15.24/en/guides/frontend/conversational-flows"},{"title":"Generative UI","icon":"wand-magic-sparkles","mode":"wide","href":"/v1.15.24/en/guides/frontend/generative-ui"},{"title":"Tool-Based Generative UI","icon":"puzzle-piece","mode":"wide","href":"/v1.15.24/en/guides/frontend/tool-based-generative-ui"},{"title":"Agentic Generative UI","icon":"list-check","mode":"wide","href":"/v1.15.24/en/guides/frontend/agentic-generative-ui"},{"title":"Reasoning","icon":"brain","mode":"wide","href":"/v1.15.24/en/guides/frontend/reasoning"},{"title":"A2UI","icon":"table-cells","mode":"wide","href":"/v1.15.24/en/guides/frontend/a2ui"},{"title":"Human-in-the-Loop","icon":"user-check","mode":"wide","href":"/v1.15.24/en/guides/frontend/human-in-the-loop"},{"title":"Shared State","icon":"arrows-rotate","mode":"wide","href":"/v1.15.24/en/guides/frontend/shared-state"},{"title":"Frontend Actions","icon":"bolt","mode":"wide","href":"/v1.15.24/en/guides/frontend/frontend-actions"},{"title":"Predictive State Updates","icon":"gauge-high","mode":"wide","href":"/v1.15.24/en/guides/frontend/predictive-state-updates"},{"title":"Channels","icon":"messages","mode":"wide","href":"/v1.15.24/en/guides/frontend/channels"}]},{"group":"Tools","icon":"wrench","pages":[{"title":"Publish Custom Tools","icon":"box-open","mode":"wide","href":"/v1.15.24/en/guides/tools/publish-custom-tools"}]},{"group":"Coding Tools","icon":"terminal","pages":[{"title":"Coding Tools","icon":"terminal","mode":"wide","href":"/v1.15.24/en/guides/coding-tools/agents-md"},{"title":"Build with AI","icon":"robot","mode":"wide","href":"/v1.15.24/en/guides/coding-tools/build-with-ai"}]},{"group":"Advanced","icon":"gear","pages":[{"title":"Customizing Prompts","icon":"message-pen","mode":"wide","href":"/v1.15.24/en/guides/advanced/customizing-prompts"},{"title":"Fingerprinting","icon":"fingerprint","mode":"wide","href":"/v1.15.24/en/guides/advanced/fingerprinting"}]},{"group":"Migration","icon":"shuffle","pages":[{"title":"Moving from LangGraph to CrewAI: A Practical Guide for Engineers","icon":"switch","mode":"wide","href":"/v1.15.24/en/guides/migration/migrating-from-langgraph"},{"title":"Upgrading CrewAI","icon":"arrow-up-circle","href":"/v1.15.24/en/guides/migration/upgrading-crewai"}]}]},{"group":"Core Concepts","pages":[{"title":"Agents","icon":"robot","mode":"wide","href":"/v1.15.24/en/concepts/agents"},{"title":"Agent Capabilities","icon":"puzzle-piece","mode":"wide","href":"/v1.15.24/en/concepts/agent-capabilities"},{"title":"Tasks","icon":"list-check","mode":"wide","href":"/v1.15.24/en/concepts/tasks"},{"title":"Crews","icon":"people-group","mode":"wide","href":"/v1.15.24/en/concepts/crews"},{"title":"Flows","icon":"arrow-progress","mode":"wide","href":"/v1.15.24/en/concepts/flows"},{"title":"Streaming","icon":"radio","mode":"wide","href":"/v1.15.24/en/concepts/streaming"},{"title":"Production Architecture","icon":"server","mode":"wide","href":"/v1.15.24/en/concepts/production-architecture"},{"title":"Knowledge","icon":"book","mode":"wide","href":"/v1.15.24/en/concepts/knowledge"},{"title":"Skills","icon":"bolt","mode":"wide","href":"/v1.15.24/en/concepts/skills"},{"title":"LLMs","icon":"microchip-ai","mode":"wide","href":"/v1.15.24/en/concepts/llms"},{"title":"Files","icon":"file-image","href":"/v1.15.24/en/concepts/files"},{"title":"Processes","icon":"bars-staggered","mode":"wide","href":"/v1.15.24/en/concepts/processes"},{"title":"Collaboration","icon":"screen-users","mode":"wide","href":"/v1.15.24/en/concepts/collaboration"},{"title":"Training","icon":"dumbbell","mode":"wide","href":"/v1.15.24/en/concepts/training"},{"title":"Memory","icon":"database","mode":"wide","href":"/v1.15.24/en/concepts/memory"},{"title":"Reasoning","icon":"brain","mode":"wide","href":"/v1.15.24/en/concepts/reasoning"},{"title":"Planning","icon":"ruler-combined","mode":"wide","href":"/v1.15.24/en/concepts/planning"},{"title":"Testing","icon":"vial","mode":"wide","href":"/v1.15.24/en/concepts/testing"},{"title":"CLI","icon":"terminal","mode":"wide","href":"/v1.15.24/en/concepts/cli"},{"title":"Tools","icon":"screwdriver-wrench","mode":"wide","href":"/v1.15.24/en/concepts/tools"},{"title":"Event Listeners","icon":"spinner","mode":"wide","href":"/v1.15.24/en/concepts/event-listener"},{"title":"Checkpointing","icon":"floppy-disk","mode":"wide","href":"/v1.15.24/en/concepts/checkpointing"}]},{"group":"MCP Integration","pages":[{"title":"MCP Servers as Tools in CrewAI","icon":"plug","mode":"wide","href":"/v1.15.24/en/mcp/overview"},{"title":"MCP DSL Integration","icon":"code","mode":"wide","href":"/v1.15.24/en/mcp/dsl-integration"},{"title":"Stdio Transport","icon":"server","mode":"wide","href":"/v1.15.24/en/mcp/stdio"},{"title":"SSE Transport","icon":"wifi","mode":"wide","href":"/v1.15.24/en/mcp/sse"},{"title":"Streamable HTTP Transport","icon":"globe","mode":"wide","href":"/v1.15.24/en/mcp/streamable-http"},{"title":"Connecting to Multiple MCP Servers","description":"Learn how to use MCPServerAdapter in CrewAI to connect to multiple MCP servers simultaneously and aggregate their tools.","icon":"layer-group","mode":"wide","href":"/v1.15.24/en/mcp/multiple-servers"},{"title":"MCP Security Considerations","icon":"lock","mode":"wide","href":"/v1.15.24/en/mcp/security"}]},{"group":"Tools","pages":[{"title":"Tools Overview","description":"Discover CrewAI's extensive library of 40+ tools to supercharge your AI agents","icon":"toolbox","mode":"wide","href":"/v1.15.24/en/tools/overview"},{"group":"File \u0026 Document","icon":"folder-open","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/file-document/overview"},{"title":"File Read","icon":"folders","mode":"wide","href":"/v1.15.24/en/tools/file-document/filereadtool"},{"title":"File Write","icon":"file-pen","mode":"wide","href":"/v1.15.24/en/tools/file-document/filewritetool"},{"title":"PDF RAG Search","icon":"file-pdf","mode":"wide","href":"/v1.15.24/en/tools/file-document/pdfsearchtool"},{"title":"DOCX RAG Search","icon":"file-word","mode":"wide","href":"/v1.15.24/en/tools/file-document/docxsearchtool"},{"title":"MDX RAG Search","icon":"markdown","mode":"wide","href":"/v1.15.24/en/tools/file-document/mdxsearchtool"},{"title":"XML RAG Search","icon":"file-xml","mode":"wide","href":"/v1.15.24/en/tools/file-document/xmlsearchtool"},{"title":"TXT RAG Search","icon":"file-lines","mode":"wide","href":"/v1.15.24/en/tools/file-document/txtsearchtool"},{"title":"JSON RAG Search","icon":"file-code","mode":"wide","href":"/v1.15.24/en/tools/file-document/jsonsearchtool"},{"title":"CSV RAG Search","icon":"file-csv","mode":"wide","href":"/v1.15.24/en/tools/file-document/csvsearchtool"},{"title":"Directory RAG Search","icon":"address-book","mode":"wide","href":"/v1.15.24/en/tools/file-document/directorysearchtool"},{"title":"Directory Read","icon":"folder-tree","mode":"wide","href":"/v1.15.24/en/tools/file-document/directoryreadtool"},{"title":"OCR Tool","icon":"image","mode":"wide","href":"/v1.15.24/en/tools/file-document/ocrtool"},{"title":"PDF Text Writing Tool","icon":"file-pdf","mode":"wide","href":"/v1.15.24/en/tools/file-document/pdf-text-writing-tool"}]},{"group":"Web Scraping \u0026 Browsing","icon":"globe","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/overview"},{"title":"Scrape Website","icon":"magnifying-glass-location","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/scrapewebsitetool"},{"title":"Scrape Element From Website Tool","icon":"code","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/scrapeelementfromwebsitetool"},{"title":"Scrapfly Scrape Website Tool","icon":"spider","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/scrapflyscrapetool"},{"title":"Selenium Scraper","icon":"clipboard-user","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/seleniumscrapingtool"},{"title":"Scrapegraph Scrape Tool","icon":"chart-area","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/scrapegraphscrapetool"},{"title":"Spider Scraper","icon":"spider-web","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/spidertool"},{"title":"Browserbase Web Loader","icon":"browser","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/browserbaseloadtool"},{"title":"Hyperbrowser Load Tool","icon":"globe","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/hyperbrowserloadtool"},{"title":"Stagehand Tool","icon":"hand","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/stagehandtool"},{"title":"Firecrawl Crawl Website","icon":"fire-flame","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/firecrawlcrawlwebsitetool"},{"title":"Firecrawl Scrape Website","icon":"fire-flame","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/firecrawlscrapewebsitetool"},{"title":"Oxylabs Scrapers","icon":"globe","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/oxylabsscraperstool"},{"title":"Bright Data Tools","icon":"spider","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/brightdata-tools"},{"title":"You.com Content Extraction Tool","icon":"globe","mode":"wide","href":"/v1.15.24/en/tools/web-scraping/youai-contents"}]},{"group":"Search \u0026 Research","icon":"magnifying-glass","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/search-research/overview"},{"title":"Google Serper Search","icon":"google","mode":"wide","href":"/v1.15.24/en/tools/search-research/serperdevtool"},{"title":"Brave Search Tools","icon":"searchengin","mode":"wide","href":"/v1.15.24/en/tools/search-research/bravesearchtool"},{"title":"Exa Search Tool","icon":"magnifying-glass","mode":"wide","href":"/v1.15.24/en/tools/search-research/exasearchtool"},{"title":"Linkup Search Tool","icon":"link","mode":"wide","href":"/v1.15.24/en/tools/search-research/linkupsearchtool"},{"title":"Github Search","icon":"github","mode":"wide","href":"/v1.15.24/en/tools/search-research/githubsearchtool"},{"title":"Website RAG Search","icon":"globe-stand","mode":"wide","href":"/v1.15.24/en/tools/search-research/websitesearchtool"},{"title":"Code Docs RAG Search","icon":"code","mode":"wide","href":"/v1.15.24/en/tools/search-research/codedocssearchtool"},{"title":"YouTube Channel RAG Search","icon":"youtube","mode":"wide","href":"/v1.15.24/en/tools/search-research/youtubechannelsearchtool"},{"title":"YouTube Video RAG Search","icon":"youtube","mode":"wide","href":"/v1.15.24/en/tools/search-research/youtubevideosearchtool"},{"title":"Tavily Search Tool","icon":"magnifying-glass","mode":"wide","href":"/v1.15.24/en/tools/search-research/tavilysearchtool"},{"title":"Tavily Extractor Tool","icon":"square-poll-horizontal","mode":"wide","href":"/v1.15.24/en/tools/search-research/tavilyextractortool"},{"title":"Tavily Research Tool","icon":"flask","mode":"wide","href":"/v1.15.24/en/tools/search-research/tavilyresearchtool"},{"title":"Arxiv Paper Tool","icon":"box-archive","mode":"wide","href":"/v1.15.24/en/tools/search-research/arxivpapertool"},{"title":"SerpApi Google Search Tool","icon":"google","mode":"wide","href":"/v1.15.24/en/tools/search-research/serpapi-googlesearchtool"},{"title":"SerpApi Google Shopping Tool","icon":"cart-shopping","mode":"wide","href":"/v1.15.24/en/tools/search-research/serpapi-googleshoppingtool"},{"title":"Databricks SQL Query Tool","icon":"trowel-bricks","mode":"wide","href":"/v1.15.24/en/tools/search-research/databricks-query-tool"},{"title":"You.com Search \u0026 Research Tools","icon":"magnifying-glass","mode":"wide","href":"/v1.15.24/en/tools/search-research/youai-search"}]},{"group":"Database \u0026 Data","icon":"database","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/database-data/overview"},{"title":"MySQL RAG Search","icon":"database","mode":"wide","href":"/v1.15.24/en/tools/database-data/mysqltool"},{"title":"PG RAG Search","icon":"elephant","mode":"wide","href":"/v1.15.24/en/tools/database-data/pgsearchtool"},{"title":"Snowflake Search Tool","icon":"snowflake","mode":"wide","href":"/v1.15.24/en/tools/database-data/snowflakesearchtool"},{"title":"NL2SQL Tool","icon":"language","mode":"wide","href":"/v1.15.24/en/tools/database-data/nl2sqltool"},{"title":"Qdrant Vector Search Tool","icon":"vector-square","mode":"wide","href":"/v1.15.24/en/tools/database-data/qdrantvectorsearchtool"},{"title":"Weaviate Vector Search","icon":"network-wired","mode":"wide","href":"/v1.15.24/en/tools/database-data/weaviatevectorsearchtool"},{"title":"MongoDB Vector Search Tool","icon":"leaf","mode":"wide","href":"/v1.15.24/en/tools/database-data/mongodbvectorsearchtool"},{"title":"SingleStore Search Tool","icon":"circle","mode":"wide","href":"/v1.15.24/en/tools/database-data/singlestoresearchtool"},{"title":"Db2 Vector Search Tool","icon":"database","mode":"wide","href":"/v1.15.24/en/tools/database-data/db2searchtool"}]},{"group":"AI \u0026 Machine Learning","icon":"brain","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/overview"},{"title":"DALL-E Tool","icon":"image","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/dalletool"},{"title":"Vision Tool","icon":"eye","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/visiontool"},{"title":"AI Mind Tool","icon":"brain","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/aimindtool"},{"title":"LlamaIndex Tool","icon":"address-book","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/llamaindextool"},{"title":"LangChain Tool","icon":"link","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/langchaintool"},{"title":"RAG Tool","icon":"vector-square","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/ragtool"},{"title":"Code Interpreter","icon":"code-simple","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/codeinterpretertool"},{"title":"Daytona Sandbox Tools","icon":"box","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/daytona"},{"title":"E2B Sandbox Tools","icon":"box","mode":"wide","href":"/v1.15.24/en/tools/ai-ml/e2bsandboxtools"}]},{"group":"Cloud \u0026 Storage","icon":"cloud","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/cloud-storage/overview"},{"title":"S3 Reader Tool","icon":"aws","mode":"wide","href":"/v1.15.24/en/tools/cloud-storage/s3readertool"},{"title":"S3 Writer Tool","icon":"aws","mode":"wide","href":"/v1.15.24/en/tools/cloud-storage/s3writertool"},{"title":"Bedrock Knowledge Base Retriever","icon":"aws","mode":"wide","href":"/v1.15.24/en/tools/cloud-storage/bedrockkbretriever"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/integration/overview"},{"title":"Bedrock Invoke Agent Tool","icon":"aws","mode":"wide","href":"/v1.15.24/en/tools/integration/bedrockinvokeagenttool"},{"title":"CrewAI Run Automation Tool","icon":"robot","href":"/v1.15.24/en/tools/integration/crewaiautomationtool"},{"title":"Merge Agent Handler Tool","icon":"diagram-project","mode":"wide","href":"/v1.15.24/en/tools/integration/mergeagenthandlertool"}]},{"group":"Automation","icon":"bolt","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/tools/automation/overview"},{"title":"Apify Actors","icon":"); -webkit-mask-image: url('https://upload.wikimedia.org/wikipedia/commons/a/ae/Apify.svg');/*","mode":"wide","href":"/v1.15.24/en/tools/automation/apifyactorstool"},{"title":"Composio Tool","icon":"gear-code","mode":"wide","href":"/v1.15.24/en/tools/automation/composiotool"},{"title":"MultiOn Tool","icon":"globe","mode":"wide","href":"/v1.15.24/en/tools/automation/multiontool"},{"title":"Wait Tool","icon":"hourglass-half","mode":"wide","href":"/v1.15.24/en/tools/automation/waittool"},{"title":"Zapier Actions Tool","icon":"bolt","mode":"wide","href":"/v1.15.24/en/tools/automation/zapieractionstool"}]}]},{"group":"Observability","pages":[{"title":"CrewAI Tracing","icon":"magnifying-glass-chart","mode":"wide","href":"/v1.15.24/en/observability/tracing"},{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/observability/overview"},{"title":"Arize Phoenix","icon":"magnifying-glass-chart","mode":"wide","href":"/v1.15.24/en/observability/arize-phoenix"},{"title":"Braintrust","icon":"magnifying-glass-chart","mode":"wide","href":"/v1.15.24/en/observability/braintrust"},{"title":"Datadog Integration","icon":"dog","mode":"wide","href":"/v1.15.24/en/observability/datadog"},{"title":"Galileo","icon":"telescope","mode":"wide","href":"/v1.15.24/en/observability/galileo"},{"title":"LangDB Integration","icon":"database","mode":"wide","href":"/v1.15.24/en/observability/langdb"},{"title":"Langfuse Integration","icon":"vials","mode":"wide","href":"/v1.15.24/en/observability/langfuse"},{"title":"Langtrace Integration","icon":"chart-line","mode":"wide","href":"/v1.15.24/en/observability/langtrace"},{"title":"Maxim Integration","icon":"infinity","mode":"wide","href":"/v1.15.24/en/observability/maxim"},{"title":"MLflow Integration","icon":"bars-staggered","mode":"wide","href":"/v1.15.24/en/observability/mlflow"},{"title":"Neatlogs Integration","icon":"magnifying-glass-chart","mode":"wide","href":"/v1.15.24/en/observability/neatlogs"},{"title":"OpenLIT Integration","icon":"magnifying-glass-chart","mode":"wide","href":"/v1.15.24/en/observability/openlit"},{"title":"Opik Integration","icon":"meteor","mode":"wide","href":"/v1.15.24/en/observability/opik"},{"title":"Patronus AI Evaluation","icon":"shield-check","mode":"wide","href":"/v1.15.24/en/observability/patronus-evaluation"},{"title":"Portkey Integration","icon":"key","mode":"wide","href":"/v1.15.24/en/observability/portkey"},{"title":"Weave Integration","icon":"radar","mode":"wide","href":"/v1.15.24/en/observability/weave"},{"title":"TrueFoundry Integration","icon":"chart-line","mode":"wide","href":"/v1.15.24/en/observability/truefoundry"}]},{"group":"Learn","pages":[{"title":"Overview","icon":"face-smile","mode":"wide","href":"/v1.15.24/en/learn/overview"},{"title":"Strategic LLM Selection Guide","icon":"brain-circuit","mode":"wide","href":"/v1.15.24/en/learn/llm-selection-guide"},{"title":"Conditional Tasks","icon":"diagram-subtask","mode":"wide","href":"/v1.15.24/en/learn/conditional-tasks"},{"title":"Coding Agents","icon":"rectangle-code","mode":"wide","href":"/v1.15.24/en/learn/coding-agents"},{"title":"Create Custom Tools","icon":"hammer","mode":"wide","href":"/v1.15.24/en/learn/create-custom-tools"},{"title":"Custom LLM Implementation","icon":"code","mode":"wide","href":"/v1.15.24/en/learn/custom-llm"},{"title":"Custom Manager Agent","icon":"user-shield","mode":"wide","href":"/v1.15.24/en/learn/custom-manager-agent"},{"title":"Customize Agents","icon":"user-pen","mode":"wide","href":"/v1.15.24/en/learn/customizing-agents"},{"title":"Image Generation with DALL-E","icon":"image","mode":"wide","href":"/v1.15.24/en/learn/dalle-image-generation"},{"title":"Force Tool Output as Result","icon":"wrench-simple","mode":"wide","href":"/v1.15.24/en/learn/force-tool-output-as-result"},{"title":"Hierarchical Process","icon":"sitemap","mode":"wide","href":"/v1.15.24/en/learn/hierarchical-process"},{"title":"Human Input on Execution","icon":"user-plus","mode":"wide","href":"/v1.15.24/en/learn/human-input-on-execution"},{"title":"Human-in-the-Loop (HITL) Workflows","icon":"user-check","mode":"wide","href":"/v1.15.24/en/learn/human-in-the-loop"},{"title":"Human Feedback in Flows","icon":"user-check","mode":"wide","href":"/v1.15.24/en/learn/human-feedback-in-flows"},{"title":"Kickoff Crew Asynchronously","icon":"rocket-launch","mode":"wide","href":"/v1.15.24/en/learn/kickoff-async"},{"title":"Kickoff Crew for Each","icon":"at","mode":"wide","href":"/v1.15.24/en/learn/kickoff-for-each"},{"title":"Streaming Runtime Contract","icon":"tower-broadcast","mode":"wide","href":"/v1.15.24/en/learn/streaming-runtime-contract"},{"title":"Consuming Streams","icon":"square-terminal","mode":"wide","href":"/v1.15.24/en/learn/consuming-streams"},{"title":"Connect to any LLM","icon":"brain-circuit","mode":"wide","href":"/v1.15.24/en/learn/llm-connections"},{"title":"Using CrewAI Without LiteLLM","icon":"shield-check","mode":"wide","href":"/v1.15.24/en/learn/litellm-removal-guide"},{"title":"Using Multimodal Agents","icon":"video","mode":"wide","href":"/v1.15.24/en/learn/multimodal-agents"},{"title":"Replay Tasks from Latest Crew Kickoff","icon":"arrow-right","mode":"wide","href":"/v1.15.24/en/learn/replay-tasks-from-latest-crew-kickoff"},{"title":"Sequential Processes","icon":"forward","mode":"wide","href":"/v1.15.24/en/learn/sequential-process"},{"title":"Using Annotations in crew.py","icon":"at","mode":"wide","href":"/v1.15.24/en/learn/using-annotations"},{"group":"Execution Hooks","pages":[{"title":"Execution Hooks","mode":"wide","href":"/v1.15.24/en/learn/execution-hooks"},{"title":"LLM Call Hooks","mode":"wide","href":"/v1.15.24/en/learn/llm-hooks"},{"title":"Tool Call Hooks","mode":"wide","href":"/v1.15.24/en/learn/tool-hooks"},{"title":"Execution Boundary Hooks","mode":"wide","href":"/v1.15.24/en/learn/execution-boundary-hooks"},{"title":"Step Hooks","mode":"wide","href":"/v1.15.24/en/learn/step-hooks"},{"title":"Before and After Kickoff Hooks","mode":"wide","href":"/v1.15.24/en/learn/before-and-after-kickoff-hooks"}]}]},{"group":"Telemetry","pages":[{"title":"Telemetry","icon":"signal-stream","mode":"wide","href":"/v1.15.24/en/telemetry"}]}]},{"tab":"AMP","icon":"briefcase","href":"https://docs-platform.crewai.com/platform/en/introduction"},{"tab":"API Reference","icon":"magnifying-glass","pages":[{"title":"API Reference","href":"/v1.15.24/en/api-reference/introduction"}]},{"tab":"Examples","icon":"code","pages":[{"title":"Examples","href":"/v1.15.24/en/examples/example"}]},{"tab":"Changelog","icon":"clock","pages":[{"title":"Changelog","href":"/v1.15.24/en/changelog"}]}]},{"version":"v1.15.23","pages":[{"title":"v1.15.23","href":"/v1.15.23/en/mcp/security"}]},{"version":"v1.15.22","pages":[{"title":"v1.15.22","href":"/v1.15.22/en/mcp/security"}]},{"version":"v1.15.21","pages":[{"title":"v1.15.21","href":"/v1.15.21/en/mcp/security"}]},{"version":"v1.15.20","pages":[{"title":"v1.15.20","href":"/v1.15.20/en/mcp/security"}]},{"version":"v1.15.19","pages":[{"title":"v1.15.19","href":"/v1.15.19/en/mcp/security"}]},{"version":"v1.15.18","pages":[{"title":"v1.15.18","href":"/v1.15.18/en/mcp/security"}]},{"version":"v1.15.17","pages":[{"title":"v1.15.17","href":"/v1.15.17/en/mcp/security"}]},{"version":"v1.15.16","pages":[{"title":"v1.15.16","href":"/v1.15.16/en/mcp/security"}]},{"version":"v1.15.15","pages":[{"title":"v1.15.15","href":"/v1.15.15/en/mcp/security"}]},{"version":"v1.15.14","pages":[{"title":"v1.15.14","href":"/v1.15.14/en/mcp/security"}]},{"version":"v1.15.13","pages":[{"title":"v1.15.13","href":"/v1.15.13/en/mcp/security"}]},{"version":"v1.15.12","pages":[{"title":"v1.15.12","href":"/v1.15.12/en/mcp/security"}]},{"version":"v1.15.11","pages":[{"title":"v1.15.11","href":"/v1.15.11/en/mcp/security"}]},{"version":"v1.15.10","pages":[{"title":"v1.15.10","href":"/v1.15.10/en/mcp/security"}]},{"version":"v1.15.9","pages":[{"title":"v1.15.9","href":"/v1.15.9/en/mcp/security"}]},{"version":"v1.15.8","pages":[{"title":"v1.15.8","href":"/v1.15.8/en/mcp/security"}]},{"version":"v1.15.7","pages":[{"title":"v1.15.7","href":"/v1.15.7/en/mcp/security"}]},{"version":"v1.15.6","pages":[{"title":"v1.15.6","href":"/v1.15.6/en/mcp/security"}]},{"version":"v1.15.5","pages":[{"title":"v1.15.5","href":"/v1.15.5/en/mcp/security"}]},{"version":"v1.15.4","pages":[{"title":"v1.15.4","href":"/v1.15.4/en/mcp/security"}]},{"version":"v1.15.3","pages":[{"title":"v1.15.3","href":"/v1.15.3/en/mcp/security"}]},{"version":"v1.15.2","pages":[{"title":"v1.15.2","href":"/v1.15.2/en/mcp/security"}]},{"version":"v1.15.1","pages":[{"title":"v1.15.1","href":"/v1.15.1/en/mcp/security"}]},{"version":"v1.15.0","pages":[{"title":"v1.15.0","href":"/v1.15.0/en/mcp/security"}]},{"version":"v1.14.7","pages":[{"title":"v1.14.7","href":"/v1.14.7/en/mcp/security"}]},{"version":"v1.14.6","pages":[{"title":"v1.14.6","href":"/v1.14.6/en/mcp/security"}]},{"version":"v1.14.5","pages":[{"title":"v1.14.5","href":"/v1.14.5/en/mcp/security"}]},{"version":"v1.14.4","pages":[{"title":"v1.14.4","href":"/v1.14.4/en/mcp/security"}]},{"version":"v1.14.3","pages":[{"title":"v1.14.3","href":"/v1.14.3/en/mcp/security"}]},{"version":"v1.14.2","pages":[{"title":"v1.14.2","href":"/v1.14.2/en/mcp/security"}]},{"version":"v1.14.1","pages":[{"title":"v1.14.1","href":"/v1.14.1/en/mcp/security"}]},{"version":"v1.14.0","pages":[{"title":"v1.14.0","href":"/v1.14.0/en/mcp/security"}]},{"version":"v1.13.0","pages":[{"title":"v1.13.0","href":"/v1.13.0/en/mcp/security"}]},{"version":"v1.12.2","pages":[{"title":"v1.12.2","href":"/v1.12.2/en/mcp/security"}]},{"version":"v1.12.1","pages":[{"title":"v1.12.1","href":"/v1.12.1/en/mcp/security"}]},{"version":"v1.12.0","pages":[{"title":"v1.12.0","href":"/v1.12.0/en/mcp/security"}]},{"version":"v1.11.1","pages":[{"title":"v1.11.1","href":"/v1.11.1/en/mcp/security"}]},{"version":"v1.11.0","pages":[{"title":"v1.11.0","href":"/v1.11.0/en/mcp/security"}]},{"version":"v1.10.1","pages":[{"title":"v1.10.1","href":"/v1.10.1/en/mcp/security"}]},{"version":"v1.10.0","pages":[{"title":"v1.10.0","href":"/v1.10.0/en/mcp/security"}]}],"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://crewai.com"},{"anchor":"Forum","icon":"discourse","href":"https://community.crewai.com"},{"anchor":"Blog","icon":"newspaper","href":"https://blog.crewai.com"},{"anchor":"CrewGPT","icon":"robot","href":"https://chatgpt.com/g/g-qqTuUWsBY-crewai-assistant"}]}},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/v1.15.24/pt-BR/mcp/security"}]},{"language":"ko","pages":[{"title":"ko","href":"/v1.15.24/ko/mcp/security"}]},{"language":"ar","pages":[{"title":"ar","href":"/v1.15.24/ar/mcp/security"}]}]},"title":"MCP Security Considerations - CrewAI","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}