소개
MCP(Model Context Protocol, 모델 컨텍스트 프로토콜)는 AI 모델과 외부 도구 및 데이터 소스 간의 통신 방식을 정의하는 개방 표준입니다. OpenClaw는 MCP를 깊이 통합하여 AI 어시스턴트가 MCP Server를 통해 파일 시스템, 데이터베이스, API 등 외부 리소스와 상호작용할 수 있도록 합니다.
이 튜토리얼에서는 개념부터 시작하여 OpenClaw에서의 MCP 설정과 사용법을 습득하도록 안내합니다.
MCP란 무엇인가
핵심 개념
MCP가 해결하는 핵심 문제는 AI 모델이 외부 도구를 안전하고 표준화된 방식으로 사용할 수 있게 하는 것입니다.
사용자 메시지 → OpenClaw → AI 모델 → 도구 필요 → MCP Client → MCP Server → 작업 실행
↓
사용자 응답 수신 ← OpenClaw ← AI 모델 ← 결과 획득 ← MCP Client ← MCP Server
MCP의 세 가지 핵심 기능
| 기능 | 설명 | 예시 |
|---|---|---|
| Tools | 호출 가능한 함수/도구 | 파일 읽기/쓰기, HTTP 요청 전송, 데이터베이스 조회 |
| Resources | 접근 가능한 데이터 리소스 | 파일 내용, 데이터베이스 테이블, API 엔드포인트 |
| Prompts | 사전 정의된 프롬프트 템플릿 | 코드 리뷰 템플릿, 요약 템플릿 |
MCP Server 유형
MCP Server는 두 가지 실행 방식이 있습니다:
- Stdio(표준 입출력): 자식 프로세스로 실행되며 stdin/stdout을 통해 통신
- SSE(Server-Sent Events): HTTP 서비스로 실행되며 HTTP를 통해 통신
OpenClaw에서 MCP Server 설정
기본 설정 구조
~/.config/openclaw/openclaw.json5에서 MCP를 설정합니다:
{
mcp: {
servers: {
// 각 MCP Server는 고유한 이름을 가집니다
"server-name": {
// Stdio 모드 설정
command: "npx",
args: ["-y", "@package/mcp-server"],
env: {
// 환경 변수
API_KEY: "your-key"
}
},
// 또는 SSE 모드 설정
"remote-server": {
url: "http://localhost:3001/sse",
headers: {
"Authorization": "Bearer your-token"
}
}
}
}
}
다중 Server 공존
여러 MCP Server를 동시에 설정할 수 있습니다:
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", "--allow-write", "/home/user/documents"]
},
"database": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-sqlite",
"--db-path", "/home/user/data/app.db"]
},
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"]
},
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxxxx"
}
}
}
}
}
주요 MCP Server 상세 설명
1. 파일 시스템 MCP Server
AI가 로컬 파일을 읽고 쓸 수 있게 하며, 문서 관리 및 데이터 저장 시나리오에 적합합니다.
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: [
"-y",
"@modelcontextprotocol/server-filesystem",
"--allow-read", // 읽기 허용
"--allow-write", // 쓰기 허용
"/home/user/docs" // 디렉토리 범위 제한
]
}
}
}
}
제공되는 도구:
| 도구 이름 | 기능 | 매개변수 |
|---|---|---|
read_file |
파일 내용 읽기 | path |
write_file |
파일 쓰기 | path, content |
list_directory |
디렉토리 내용 나열 | path |
create_directory |
디렉토리 생성 | path |
move_file |
파일 이동/이름 변경 | source, destination |
search_files |
파일 검색 | path, pattern |
보안 팁: 반드시 경로 매개변수를 통해 접근 가능한 디렉토리 범위를 제한하고, 전체 파일 시스템에 대한 접근 권한을 부여하지 마십시오.
2. SQLite 데이터베이스 MCP Server
AI가 SQLite 데이터베이스를 조회하고 조작할 수 있게 합니다.
{
mcp: {
servers: {
"sqlite": {
command: "npx",
args: [
"-y",
"@modelcontextprotocol/server-sqlite",
"--db-path", "/home/user/data/myapp.db"
]
}
}
}
}
제공되는 도구:
| 도구 이름 | 기능 |
|---|---|
read_query |
SELECT 쿼리 실행 |
write_query |
INSERT/UPDATE/DELETE 실행 |
create_table |
새 테이블 생성 |
list_tables |
모든 테이블 나열 |
describe_table |
테이블 구조 확인 |
사용 예시 - 사용자가 채팅에서 "지난주 판매 데이터를 조회해줘"라고 말하면, AI가 MCP 도구를 통해 SQL 쿼리를 자동으로 실행하고 결과를 반환합니다.
3. HTTP Fetch MCP Server
AI가 HTTP 요청을 발송하여 임의의 REST API를 호출할 수 있게 합니다.
{
mcp: {
servers: {
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"],
env: {
// 선택 사항: 기본 요청 헤더 설정
DEFAULT_HEADERS: '{"User-Agent": "OpenClaw/1.0"}'
}
}
}
}
}
제공되는 도구:
| 도구 이름 | 기능 |
|---|---|
http_get |
GET 요청 발송 |
http_post |
POST 요청 발송 |
http_put |
PUT 요청 발송 |
http_delete |
DELETE 요청 발송 |
4. GitHub MCP Server
GitHub 저장소와 상호작용하여 Issue, PR, 코드 등을 확인합니다.
{
mcp: {
servers: {
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxxxx"
}
}
}
}
}
제공되는 도구:
| 도구 이름 | 기능 |
|---|---|
search_repositories |
저장소 검색 |
get_file_contents |
파일 내용 가져오기 |
list_issues |
Issue 나열 |
create_issue |
Issue 생성 |
list_pull_requests |
PR 나열 |
create_pull_request |
PR 생성 |
5. PostgreSQL MCP Server
PostgreSQL 데이터베이스에 연결합니다:
{
mcp: {
servers: {
"postgres": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-postgres"],
env: {
DATABASE_URL: "postgresql://user:pass@localhost:5432/mydb"
}
}
}
}
}
MCP와 Skill의 협업
MCP Server는 Skill에 외부 세계와 상호작용하는 능력을 제공합니다. SKILL.md에서 필요한 MCP 도구를 선언합니다:
---
name: my-skill
mcp_tools:
- filesystem # 파일 시스템 도구 사용
- http_fetch # HTTP 요청 도구 사용
- sqlite # 데이터베이스 도구 사용
---
AI는 Skill 실행 시 필요에 따라 해당 MCP 도구를 자동으로 호출합니다.
실제 플로우 예시
사용자가 "지난주 주문 데이터를 CSV 파일로 내보내줘"라고 보내면:
- AI가
sqlite와filesystem두 MCP Server가 필요한 작업임을 인식합니다 sqlite.read_query를 호출하여 지난주 주문 데이터를 조회합니다- 조회 결과를 CSV 형식으로 포맷합니다
filesystem.write_file을 호출하여 CSV 파일을 저장합니다- 파일 경로를 사용자에게 반환합니다
커스텀 MCP Server
기존 MCP Server로 요구사항을 충족할 수 없는 경우 직접 개발할 수 있습니다.
최소 예시 (Node.js)
// my-mcp-server.js
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({
name: "my-custom-server",
version: "1.0.0"
}, {
capabilities: {
tools: {}
}
});
// 도구 등록
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "greet",
description: "Generate a greeting message",
inputSchema: {
type: "object",
properties: {
name: { type: "string", description: "Name to greet" }
},
required: ["name"]
}
}]
}));
// 도구 호출 처리
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "greet") {
const name = request.params.arguments.name;
return {
content: [{ type: "text", text: `Hello, ${name}!` }]
};
}
});
// 서버 시작
const transport = new StdioServerTransport();
await server.connect(transport);
OpenClaw에서 설정합니다:
{
mcp: {
servers: {
"my-custom": {
command: "node",
args: ["/path/to/my-mcp-server.js"]
}
}
}
}
MCP Server 디버깅
MCP 도구 목록 확인
# 로드된 모든 MCP 도구 확인
openclaw doctor
출력에 연결된 모든 MCP Server와 제공되는 도구가 나열됩니다.
MCP 디버그 로그 활성화
# MCP 통신 상세 정보 확인
openclaw logs --level debug
로그에 MCP 도구 호출의 요청과 응답이 표시됩니다:
[DEBUG] MCP tool call: filesystem.read_file({path: "/home/user/notes.txt"})
[DEBUG] MCP tool result: {content: [{type: "text", text: "file contents..."}]}
MCP Server 독립 테스트
MCP Inspector 도구를 사용하여 MCP Server를 독립적으로 테스트할 수 있습니다:
npx @modelcontextprotocol/inspector npx -y @modelcontextprotocol/server-filesystem --allow-read /tmp
이 명령은 MCP 도구를 직접 호출하고 테스트할 수 있는 웹 인터페이스를 엽니다.
보안 모범 사례
최소 권한 원칙
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", // 읽기 전용
"/home/user/public-docs" // 디렉토리 제한
]
// 주의: --allow-write를 추가하지 않음
}
}
}
}
API 키 보안
설정 파일에 API 키를 하드코딩하지 말고 환경 변수를 사용하십시오:
{
mcp: {
servers: {
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
// 시스템 환경 변수 참조
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"
}
}
}
}
}
그런 다음 시스템에서 환경 변수를 설정합니다:
export GITHUB_TOKEN="ghp_xxxxx"
네트워크 격리
원격 MCP Server(SSE 모드)의 경우 다음을 권장합니다:
- HTTPS 연결 사용
- 인증 Token 설정
- 접근 가능한 IP 범위 제한
자주 묻는 질문
MCP Server 시작 실패
# npx가 정상적으로 실행되는지 확인
npx -y @modelcontextprotocol/server-filesystem --help
# Node.js 버전 확인
node --version # 22+ 필요
도구 호출 타임아웃
일부 MCP 도구(예: HTTP 요청)는 네트워크 문제로 타임아웃될 수 있습니다. 설정에서 타임아웃 시간을 설정할 수 있습니다:
{
mcp: {
// 전역 타임아웃 설정 (밀리초)
timeout: 30000,
servers: {
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"],
// 이 Server에 대한 개별 타임아웃 설정
timeout: 60000
}
}
}
}
AI가 예상 도구를 호출하지 않는 경우
Skill에서 mcp_tools가 올바르게 선언되었는지, MCP Server 이름이 설정과 일치하는지 확인하십시오. 디버그 로그를 확인하여 도구가 올바르게 로드되었는지 확인합니다.
마무리
MCP는 OpenClaw 기능 확장의 기반입니다. 다양한 MCP Server를 설정함으로써 AI 어시스턴트가 파일 시스템 접근, 데이터베이스 조회, API 호출, GitHub 조작 등 거의 모든 외부 리소스에 접근할 수 있게 됩니다. MCP의 작동 원리와 설정 방법을 이해하면 더 강력한 Skill과 자동화 워크플로우를 구축하는 데 도움이 됩니다.