MCP 서버
MCP 서버
이 항목에서는 외부 MCP(Model Context Protocol) 서버로 Cortex Code Agent SDK를 확장하는 방법을 설명해요. MCP 서버는 에이전트가 Read, Edit, Bash 같은 기본 제공 도구와 함께 외부 도구를 호출할 수 있게 해줘요.
출처: MCP servers
본문
현재 Cortex 런타임은 다음 전송(transport)을 통해 외부 MCP 서버를 지원해요.
stdiohttpsse
외부 MCP 서버 연결
Stdio 서버
Stdio 서버는 표준 입력과 출력으로 통신하는 외부 프로세스예요.
import { query } from "cortex-code-agent-sdk";
for await (const message of query({
prompt: "Search our docs for authentication best practices",
options: {
cwd: process.cwd(),
permissionMode: "bypassPermissions",
allowDangerouslySkipPermissions: true,
mcpServers: {
"my-tools": {
command: "node",
args: ["my-mcp-server.js"],
},
},
},
})) {
// Handle messages...
}
from cortex_code_agent_sdk import query, CortexCodeAgentOptions
async for message in query(
prompt="Search our docs for authentication best practices",
options=CortexCodeAgentOptions(
permission_mode="bypassPermissions",
allow_dangerously_skip_permissions=True,
mcp_servers={
"my-tools": {
"command": "node",
"args": ["my-mcp-server.js"],
},
},
),
):
# Handle messages...
pass
HTTP 및 SSE 서버
HTTP 또는 Server-Sent Events(SSE)로 통신하는 원격 MCP 서버의 경우:
import { query } from "cortex-code-agent-sdk";
for await (const message of query({
prompt: "Look up customer data",
options: {
cwd: process.cwd(),
permissionMode: "bypassPermissions",
allowDangerouslySkipPermissions: true,
mcpServers: {
"remote-api": {
type: "http",
url: "https://my-mcp-server.example.com/mcp",
headers: { "Authorization": "Bearer ${MCP_TOKEN}" },
},
},
},
})) {
// Handle messages...
}
from cortex_code_agent_sdk import query, CortexCodeAgentOptions
async for message in query(
prompt="Look up customer data",
options=CortexCodeAgentOptions(
permission_mode="bypassPermissions",
allow_dangerously_skip_permissions=True,
mcp_servers={
"remote-api": {
"type": "http",
"url": "https://my-mcp-server.example.com/mcp",
"headers": {"Authorization": "Bearer ${MCP_TOKEN}"},
},
},
),
):
# Handle messages...
pass
SSE 전송을 사용하는 서버에는 "type": "sse"를 사용할 수도 있어요.
허용되는 MCP 도구 제어
MCP 도구는 mcp__<server-name>__<tool-name> 형식의 이름에 mcp__ 접두사가 붙어요. 에이전트가 호출할 수 있는 도구를 제어하려면 allowedTools(TypeScript) 또는 allowed_tools(Python) 옵션을 사용해요.
import { query } from "cortex-code-agent-sdk";
for await (const message of query({
prompt: "Search our documentation",
options: {
cwd: process.cwd(),
permissionMode: "bypassPermissions",
allowDangerouslySkipPermissions: true,
allowedTools: [
"mcp__my-tools__search_docs",
"mcp__my-tools__*",
],
mcpServers: {
"my-tools": { command: "node", args: ["my-mcp-server.js"] },
},
},
})) {
// Handle messages...
}
from cortex_code_agent_sdk import query, CortexCodeAgentOptions
async for message in query(
prompt="Search our documentation",
options=CortexCodeAgentOptions(
permission_mode="bypassPermissions",
allow_dangerously_skip_permissions=True,
allowed_tools=[
"mcp__my-tools__search_docs",
"mcp__my-tools__*",
],
mcp_servers={
"my-tools": {"command": "node", "args": ["my-mcp-server.js"]},
},
),
):
# Handle messages...
pass
특정 도구를 차단하려면 disallowedTools / disallowed_tools를 사용할 수도 있어요.
MCP 비활성화
세션의 모든 MCP 서버를 비활성화하려면 noMcp(TypeScript) 또는 no_mcp(Python) 옵션을 사용해요.
const session = await createCortexCodeSession({
cwd: process.cwd(),
noMcp: true,
});
options = CortexCodeAgentOptions(no_mcp=True)
기능 비교
| 기능 | Python | TypeScript |
|---|---|---|
| 외부 MCP 서버(stdio) | 예(mcp_servers) |
예(mcpServers) |
| 외부 MCP 서버(HTTP/SSE) | 예(mcp_servers) |
예(mcpServers) |
allowedTools / allowed_tools |
예 | 예 |
noMcp / no_mcp |
예 | 예 |