Skip to main content
Glama

MCP Spine

mcp-spine MCP server

컨텍스트 최소화 도구 & 상태 보호기 — 토큰 낭비를 줄이고, 도구 소모를 방지하며, 컨텍스트 부패를 제거하는 로컬 우선 MCP 미들웨어 프록시입니다.

MCP Spine은 LLM 클라이언트(Claude Desktop 등)와 MCP 서버 사이에 위치하여 보안 강화, 지능형 도구 라우팅, 스키마 압축 및 파일 상태 추적 기능을 단일 프록시를 통해 제공합니다.

이유

MCP 도구를 사용하는 LLM 에이전트는 세 가지 문제에 직면합니다:

  1. 토큰 낭비 — 도구 스키마는 요청당 수천 개의 토큰을 소비합니다. 40개 이상의 도구가 로드되면 대화가 시작되기도 전에 JSON 스키마로 인해 컨텍스트가 소진됩니다.

  2. 컨텍스트 부패 — 긴 세션에서 LLM은 이전에 기억했던 오래된 파일 버전을 편집하여 최신 변경 사항을 조용히 덮어쓰는 경우가 발생합니다.

  3. 보안 경계 부재 — MCP 서버는 전체 액세스 권한으로 실행됩니다. LLM과 도구 사이에 감사 추적, 속도 제한, 비밀 정보 스크러빙이 없습니다.

MCP Spine은 이 세 가지 문제를 모두 해결합니다.

설치

pip install mcp-spine

# With semantic routing (optional)
pip install mcp-spine[ml]

빠른 시작

# Generate config
mcp-spine init

# Diagnose your setup
mcp-spine doctor --config spine.toml

# Validate config
mcp-spine verify --config spine.toml

# Start the proxy
mcp-spine serve --config spine.toml

Claude Desktop 통합

모든 개별 MCP 서버 항목을 단일 Spine 항목으로 교체하세요:

{
  "mcpServers": {
    "spine": {
      "command": "python",
      "args": ["-u", "-m", "spine.cli", "serve", "--config", "/path/to/spine.toml"],
      "cwd": "/path/to/mcp-spine"
    }
  }
}

-u 플래그는 버퍼링되지 않은 stdout을 보장하여 Windows에서 파이프가 멈추는 것을 방지합니다.

기능

1단계: 보안 프록시

  • JSON-RPC 메시지 검증 및 살균

  • 비밀 정보 스크러빙 (AWS 키, GitHub 토큰, 베어러 토큰, 개인 키, 연결 문자열)

  • 슬라이딩 윈도우를 사용한 도구별 및 전역 속도 제한

  • 심볼릭 링크를 인식하는 감옥(jail)을 통한 경로 탐색 방지

  • 서버 생성을 위한 명령 주입 방지

  • HMAC 지문이 포함된 SQLite 감사 추적

  • 실패하는 서버에 대한 서킷 브레이커

  • 설정에서 선언적 보안 정책 지원

2단계: 의미론적 라우터

  • all-MiniLM-L6-v2를 사용한 로컬 벡터 임베딩 (API 호출 없음, 데이터가 기기 밖으로 나가지 않음)

  • ChromaDB 기반 도구 인덱싱

  • 쿼리 시점 라우팅: 가장 관련성 높은 도구만 LLM에 전송

  • 명시적 컨텍스트 전환을 위한 spine_set_context 메타 도구

  • 키워드 중첩 + 최신성 가중치 재순위 지정

  • 백그라운드 모델 로딩 — 도구는 즉시 작동하며, 라우팅은 준비되는 대로 활성화됨

3단계: 스키마 최소화

  • 4단계 강도 조절 (0=끄기, 1=약함, 2=표준, 3=강함)

  • 2단계 설정 시 도구 스키마에서 61% 토큰 절감 달성

  • $schema, 제목, additionalProperties, 매개변수 설명, 기본값 제거

  • 모든 필수 필드 및 유형 정보 보존

4단계: 상태 보호기

  • watchfiles를 통해 프로젝트 파일 감시

  • 단조 증가 버전 관리와 함께 SHA-256 매니페스트 유지

  • 도구 응답에 압축된 상태 핀 삽입

  • LLM이 오래된 파일 버전을 편집하지 못하도록 방지

인간 개입 (Human-in-the-Loop)

  • 파괴적인 도구에 대한 require_confirmation 정책 플래그

  • Spine이 호출을 가로채고, 인수를 표시하며, 사용자 승인을 대기

  • LLM이 결정을 전달할 수 있도록 하는 spine_confirm / spine_deny 메타 도구

  • glob 패턴을 통한 도구별 세밀한 제어

도구 출력 메모리

  • 마지막 50개의 도구 결과를 저장하는 링 버퍼 캐싱

  • 도구 이름 + 인수 해시를 통한 중복 제거

  • TTL 만료 (기본값 1시간)

  • 캐시된 결과를 쿼리하기 위한 spine_recall 메타 도구

  • 의미론적 라우터가 턴 사이에 도구를 교체할 때 발생하는 컨텍스트 손실 방지

SSE 전송

  • 로컬 stdio 서버와 함께 HTTP/SSE를 통해 원격 MCP 서버에 연결

  • 외부 의존성 없음 (표준 라이브러리 urllib 사용)

  • 인증을 위한 사용자 정의 헤더 지원

진단

# Check your setup
mcp-spine doctor --config spine.toml

# Live monitoring dashboard
mcp-spine dashboard

# Usage analytics
mcp-spine analytics --hours 24

# Query audit log
mcp-spine audit --last 50
mcp-spine audit --security-only
mcp-spine audit --tool write_file

예시 설정

[spine]
log_level = "info"
audit_db = "spine_audit.db"

# Add as many servers as you need — they start concurrently
[[servers]]
name = "filesystem"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
timeout_seconds = 120

[[servers]]
name = "github"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_TOKEN = "ghp_..." }
timeout_seconds = 180

[[servers]]
name = "sqlite"
command = "uvx"
args = ["mcp-server-sqlite", "--db-path", "/path/to/database.db"]
timeout_seconds = 60

[[servers]]
name = "memory"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-memory"]
timeout_seconds = 60

[[servers]]
name = "brave-search"
command = "node"
args = ["/path/to/node_modules/@modelcontextprotocol/server-brave-search/dist/index.js"]
env = { BRAVE_API_KEY = "your_key" }
timeout_seconds = 60

# Remote server via SSE
# [[servers]]
# name = "remote-tools"
# transport = "sse"
# url = "https://your-server.com/sse"
# headers = { Authorization = "Bearer token" }
# timeout_seconds = 30

# Semantic routing
[routing]
max_tools = 15
rerank = true

# Schema minification — 61% token savings at level 2
[minifier]
level = 2

# State guard — prevent context rot
[state_guard]
enabled = true
watch_paths = ["/path/to/project"]

# Human-in-the-loop for destructive tools
[[security.tools]]
pattern = "write_file"
action = "allow"
require_confirmation = true

[[security.tools]]
pattern = "write_query"
action = "allow"
require_confirmation = true

# Security
[security]
scrub_secrets_in_logs = true
audit_all_tool_calls = true
global_rate_limit = 120
per_tool_rate_limit = 60

[security.path]
allowed_roots = ["/path/to/project"]
denied_patterns = ["**/.env", "**/*.key", "**/*.pem"]

보안 모델

심층 방어 — 각 계층은 다른 계층이 실패할 수 있다고 가정합니다.

위협

완화 조치

도구 인수를 통한 프롬프트 주입

입력 검증, 도구 이름 허용 목록

경로 탐색

allowed_roots로 심볼릭 링크 인식 감옥

비밀 정보 유출

AWS 키, 토큰, 개인 키 자동 스크러빙

에이전트 루프 폭주

도구별 + 전역 속도 제한

명령 주입

명령 허용 목록, 셸 메타 문자 차단

서비스 거부 (DoS)

메시지 크기 제한, 서킷 브레이커

민감한 파일 접근

.env, .key, .pem, .ssh/에 대한 차단 목록 패턴

도구 오용

정책 기반 차단, 감사 로깅, HITL 승인

로그 변조

모든 감사 항목에 HMAC 지문

파괴적 작업

require_confirmation을 통한 사용자 승인 대기

아키텍처

Client ◄──stdio──► MCP Spine ◄──stdio──► Filesystem Server
                       │      ◄──stdio──► GitHub Server
                       │      ◄──stdio──► SQLite Server
                       │      ◄──stdio──► Memory Server
                       │      ◄──stdio──► Brave Search
                       │      ◄──SSE────► Remote Server
                   ┌───┴───┐
                   │SecPol │  ← Rate limits, path jail, secret scrub
                   │Router │  ← Semantic routing (local embeddings)
                   │Minify │  ← Schema compression (61% savings)
                   │Guard  │  ← File state pinning (SHA-256)
                   │HITL   │  ← Human-in-the-loop confirmation
                   │Memory │  ← Tool output cache
                   └───────┘

시작 순서

  1. 즉각적인 핸드셰이크 (~2ms) — initialize에 즉시 응답

  2. 동시 서버 시작 — 모든 서버가 asyncio.gather를 통해 병렬로 연결

  3. 점진적 준비 — 서버가 연결되는 즉시 도구 사용 가능

  4. 지연 서버 알림 — 느린 서버가 완료되면 tools/listChanged 전송

  5. 백그라운드 ML 로딩 — 모델이 로드되면 의미론적 라우터가 조용히 활성화

Windows 지원

다음 사항에 대해 강화된 Windows 환경에서 검증됨:

  • Claude Desktop 설정 및 로그를 위한 MSIX 샌드박스 경로

  • shutil.which()를 통한 npx.cmd 확인

  • 공백(C:\Users\John Doe\) 및 괄호(C:\Program Files (x86)\)가 포함된 경로

  • 플랫폼 간 베이스네임 추출을 위한 PureWindowsPath

  • 환경 변수 병합 (설정 환경 변수가 시스템 환경 변수를 확장하며 대체하지 않음)

  • BOM 없는 UTF-8 인코딩

  • 파이프 멈춤 방지를 위한 버퍼링되지 않은 stdout (-u 플래그)

프로젝트 구조

mcp-spine/
├── pyproject.toml
├── spine/
│   ├── cli.py              # Click CLI (init, serve, verify, audit, dashboard, analytics, doctor)
│   ├── config.py           # TOML config loader with validation
│   ├── proxy.py            # Core proxy event loop
│   ├── protocol.py         # JSON-RPC message handling
│   ├── transport.py        # Server pool, circuit breakers, concurrent startup
│   ├── audit.py            # Structured logging + SQLite audit trail
│   ├── router.py           # Semantic routing (ChromaDB + sentence-transformers)
│   ├── minifier.py         # Schema pruning (4 aggression levels)
│   ├── state_guard.py      # File watcher + SHA-256 manifest + pin injection
│   ├── memory.py           # Tool output cache (ring buffer + dedup + TTL)
│   ├── dashboard.py        # Live TUI dashboard (Rich)
│   ├── sse_client.py       # SSE transport client for remote servers
│   └── security/
│       ├── secrets.py      # Credential detection & scrubbing
│       ├── paths.py        # Path traversal jail
│       ├── validation.py   # JSON-RPC message validation
│       ├── commands.py     # Server spawn guards
│       ├── rate_limit.py   # Sliding window throttling
│       ├── integrity.py    # SHA-256 + HMAC fingerprints
│       ├── env.py          # Fail-closed env var resolution
│       └── policy.py       # Declarative security policies
├── tests/
│   ├── test_security.py    # Security tests
│   ├── test_config.py      # Config validation tests
│   ├── test_minifier.py    # Schema minification tests
│   ├── test_state_guard.py # State guard tests
│   ├── test_proxy_features.py  # HITL, dashboard, analytics tests
│   └── test_memory.py      # Tool output memory tests
├── configs/
│   └── example.spine.toml  # Complete reference config
└── .github/
    └── workflows/
        └── ci.yml          # GitHub Actions: test + lint + publish

테스트

pytest tests/ -v

보안, 설정 검증, 스키마 최소화, 상태 보호기, HITL 정책, 대시보드 쿼리, 분석, 도구 메모리 및 Windows 경로 엣지 케이스를 다루는 135개 이상의 테스트.

CI는 모든 푸시마다 실행: Windows + Linux, Python 3.11/3.12/3.13.

라이선스

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Donnyb369/mcp-spine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server