Skip to main content
Glama

LSP MCP Server

by Tritlo

LSP MCP 서버

LSP(Language Server Protocol) 인터페이스와 상호 작용하는 MCP(Model Context Protocol) 서버입니다. 이 서버는 LLM이 LSP Hover 및 Completion 제공자에게 쿼리를 보낼 수 있도록 하는 브리지 역할을 합니다.

개요

MCP 서버는 다음과 같이 작동합니다.

  1. LSP 서버에 연결하는 LSP 클라이언트 시작

  2. LSP 서버에 요청을 보내는 MCP 도구 노출

  3. LLM이 이해하고 사용할 수 있는 형식으로 결과 반환

이를 통해 LLM은 LSP를 활용하여 더 정확한 코드 제안을 할 수 있습니다.

구성:

지엑스피1

특징

MCP 도구

  • get_info_on_location : 파일의 특정 위치에 대한 호버 정보를 가져옵니다.

  • get_completions : 파일의 특정 위치에서 완성 제안을 가져옵니다.

  • get_code_actions : 파일의 특정 범위에 대한 코드 작업을 가져옵니다.

  • open_document : 분석을 위해 LSP 서버에서 파일을 엽니다.

  • close_document : LSP 서버에서 파일을 닫습니다.

  • get_diagnostics : 열려 있는 파일에 대한 진단 메시지(오류, 경고)를 가져옵니다.

  • start_lsp : 지정된 루트 디렉토리로 LSP 서버를 시작합니다.

  • restart_lsp_server : MCP 서버를 재시작하지 않고 LSP 서버를 재시작합니다.

  • set_log_level : 런타임에 서버의 로깅 상세 수준을 변경합니다.

MCP 리소스

  • lsp-diagnostics:// 구독을 통해 실시간 업데이트로 진단 메시지에 액세스하기 위한 리소스

  • lsp-hover:// 특정 파일 위치에서 호버 정보를 검색하기 위한 리소스

  • lsp-completions:// 특정 위치에서 코드 완성 제안을 받기 위한 리소스

추가 기능

  • 다양한 심각도 수준을 갖춘 포괄적인 로깅 시스템

  • 가독성 향상을 위해 색상화된 콘솔 출력

  • 런타임 구성 가능한 로그 수준

  • 자세한 오류 처리 및 보고

  • 간단한 명령줄 인터페이스

필수 조건

  • Node.js(v16 이상)

  • 엔피엠

데모 서버의 경우:

  • GHC(8.10 이상)

  • Cabal(3.0 이상)

설치

MCP 서버 구축

  1. 이 저장소를 복제하세요:

    git clone https://github.com/your-username/lsp-mcp.git cd lsp-mcp
  2. 종속성 설치:

    npm install
  3. MCP 서버를 빌드합니다.

    npm run build

테스트

이 프로젝트에는 TypeScript LSP 지원에 대한 통합 테스트가 포함되어 있습니다. 이 테스트는 LSP-MCP 서버가 호버 정보, 완성, 진단 및 코드 동작과 같은 LSP 작업을 올바르게 처리하는지 확인합니다.

테스트 실행

TypeScript LSP 테스트를 실행하려면:

npm test

또는 구체적으로:

npm run test:typescript

테스트 범위

테스트는 다음 기능을 검증합니다.

  • 모의 프로젝트로 TypeScript LSP 초기화

  • 분석을 위해 TypeScript 파일 열기

  • 함수 및 유형에 대한 호버 정보 가져오기

  • 코드 완성 제안 받기

  • 진단 오류 메시지 받기

  • 오류에 대한 코드 작업 가져오기

테스트 프로젝트는 test/ts-project/ 에 있으며, 진단 피드백을 테스트하기 위한 의도적인 오류가 포함된 TypeScript 파일을 포함합니다.

용법

LSP 실행 파일의 경로와 LSP 서버에 전달할 인수를 제공하여 MCP 서버를 실행합니다.

npx tritlo/lsp-mcp <language> /path/to/lsp [lsp-args...]

예를 들어:

npx tritlo/lsp-mcp haskell /usr/bin/haskell-language-server-wrapper lsp

중요: LSP 서버 시작

버전 0.2.0 이상에서는 LSP 기능을 사용하기 전에 start_lsp 도구를 호출하여 LSP 서버를 명시적으로 시작해야 합니다. 이렇게 하면 올바른 루트 디렉터리로 초기화가 완료되며, 이는 특히 npx와 같은 도구를 사용할 때 중요합니다.

{ "tool": "start_lsp", "arguments": { "root_dir": "/path/to/your/project" } }

벌채 반출

서버에는 8가지 심각도 수준을 갖춘 포괄적인 로깅 시스템이 포함되어 있습니다.

  • debug : 디버깅을 위한 자세한 정보

  • info : 시스템 작동에 대한 일반 정보 메시지

  • notice : 중요 운영 이벤트

  • warning : 주의가 필요할 수 있는 잠재적 문제

  • error : 작동에 영향을 미치지만 시스템을 중단시키지는 않는 오류 조건

  • critical : 즉각적인 주의가 필요한 중대한 상황

  • alert : 시스템이 불안정한 상태입니다

  • emergency : 시스템을 사용할 수 없습니다

기본적으로 로그는 다음 위치로 전송됩니다.

  1. 가독성 향상을 위한 색상 코딩이 적용된 콘솔 출력

  2. 클라이언트에 대한 MCP 알림( notifications/message 방식을 통해)

디버그 로그 보기

자세한 디버깅을 위해 다음을 수행할 수 있습니다.

  1. Claude를 실행할 때 claude --mcp-debug 플래그를 사용하면 Claude와 서버 간의 모든 MCP 트래픽을 볼 수 있습니다.

    claude --mcp-debug
  2. set_log_level 도구를 사용하여 런타임에 로그 수준을 변경합니다.

    { "tool": "set_log_level", "arguments": { "level": "debug" } }

기본 로그 수준은 info , 자세한 디버그 메시지를 필터링하는 동시에 적당한 운영 세부 정보를 표시합니다.

API

서버는 다음과 같은 MCP 도구를 제공합니다.

위치 정보 얻기

파일의 특정 위치에서 호버 정보를 가져옵니다.

매개변수:

  • file_path : 파일 경로

  • language_id : 파일이 작성된 프로그래밍 언어(예: "haskell")

  • line : 줄 번호

  • column : 열 위치

예:

{ "tool": "get_info_on_location", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "line": 3, "column": 5 } }

get_completions

파일의 특정 위치에서 완성 제안을 받습니다.

매개변수:

  • file_path : 파일 경로

  • language_id : 파일이 작성된 프로그래밍 언어(예: "haskell")

  • line : 줄 번호

  • column : 열 위치

예:

{ "tool": "get_completions", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "line": 3, "column": 10 } }

get_code_actions

파일의 특정 범위에 대한 코드 동작을 가져옵니다.

매개변수:

  • file_path : 파일 경로

  • language_id : 파일이 작성된 프로그래밍 언어(예: "haskell")

  • start_line : 시작 줄 번호

  • start_column : 시작 열 위치

  • end_line : 끝 줄 번호

  • end_column : 끝 열 위치

예:

{ "tool": "get_code_actions", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell", "start_line": 3, "start_column": 5, "end_line": 3, "end_column": 10 } }

시작_lsp

지정된 루트 디렉터리로 LSP 서버를 시작합니다. 다른 LSP 관련 도구를 사용하기 전에 이 명령을 호출해야 합니다.

매개변수:

  • root_dir : LSP 서버의 루트 디렉토리(절대 경로 권장)

예:

{ "tool": "start_lsp", "arguments": { "root_dir": "/path/to/your/project" } }

lsp_server를 다시 시작하세요

MCP 서버를 재시작하지 않고 LSP 서버 프로세스를 재시작합니다. 이 기능은 LSP 서버 문제를 복구하거나 LSP 서버 구성에 변경 사항을 적용할 때 유용합니다.

매개변수:

  • root_dir : (선택 사항) LSP 서버의 루트 디렉터리입니다. 이 값을 지정하면 서버 재시작 후 이 디렉터리로 초기화됩니다.

root_dir이 없는 예(이전에 설정된 루트 디렉토리 사용):

{ "tool": "restart_lsp_server", "arguments": {} }

root_dir의 예:

{ "tool": "restart_lsp_server", "arguments": { "root_dir": "/path/to/your/project" } }

열린 문서

분석을 위해 LSP 서버에서 파일을 엽니다. 진단에 액세스하거나 파일에 다른 작업을 수행하기 전에 이 함수를 호출해야 합니다.

매개변수:

  • file_path : 열려는 파일의 경로

  • language_id : 파일이 작성된 프로그래밍 언어(예: "haskell")

예:

{ "tool": "open_document", "arguments": { "file_path": "/path/to/your/file", "language_id": "haskell" } }

문서 닫기

작업이 완료되면 LSP 서버에서 파일을 닫습니다. 이는 리소스 관리 및 정리에 도움이 됩니다.

매개변수:

  • file_path : 닫을 파일의 경로

예:

{ "tool": "close_document", "arguments": { "file_path": "/path/to/your/file" } }

진단 받기

하나 또는 모든 열려 있는 파일에 대한 진단 메시지(오류, 경고)를 가져옵니다.

매개변수:

  • file_path : (선택 사항) 진단을 받을 파일의 경로입니다. 지정하지 않으면 열려 있는 모든 파일에 대한 진단을 반환합니다.

특정 파일에 대한 예:

{ "tool": "get_diagnostics", "arguments": { "file_path": "/path/to/your/file" } }

열려 있는 모든 파일에 대한 예:

{ "tool": "get_diagnostics", "arguments": {} }

로그 레벨 설정

로그 메시지의 자세한 정도를 제어하기 위해 서버의 로깅 수준을 설정합니다.

매개변수:

  • level : 설정할 로깅 수준입니다. debug , info , notice , warning , error , critical , alert , emergency 중 하나입니다.

예:

{ "tool": "set_log_level", "arguments": { "level": "debug" } }

MCP 리소스

도구 외에도 서버는 진단, 호버 정보, 코드 완성을 포함한 LSP 기능에 액세스하기 위한 리소스를 제공합니다.

진단 리소스

서버는 lsp-diagnostics:// 리소스 스키마를 통해 진단 정보를 제공합니다. 진단 정보가 변경될 때 이러한 리소스를 구독하여 실시간 업데이트를 받을 수 있습니다.

리소스 URI:

  • lsp-diagnostics:// - 열려 있는 모든 파일에 대한 진단

  • lsp-diagnostics:///path/to/file - 특정 파일에 대한 진단

중요: 진단에 액세스하려면 먼저 open_document 도구를 사용하여 파일을 열어야 합니다.

호버 정보 리소스

서버는 lsp-hover:// 리소스 스키마를 통해 호버 정보를 노출합니다. 이를 통해 파일의 특정 위치에 있는 코드 요소에 대한 정보를 얻을 수 있습니다.

리소스 URI 형식:

lsp-hover:///path/to/file?line={line}&column={column}&language_id={language_id}

매개변수:

  • line : 줄 번호(1부터 시작)

  • column : 열 위치(1부터 시작)

  • language_id : 프로그래밍 언어(예: "haskell")

예:

lsp-hover:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

코드 완성 리소스

서버는 lsp-completions:// 리소스 스키마를 통해 코드 완성 제안을 제공합니다. 이를 통해 파일의 특정 위치에서 완성 후보를 가져올 수 있습니다.

리소스 URI 형식:

lsp-completions:///path/to/file?line={line}&column={column}&language_id={language_id}

매개변수:

  • line : 줄 번호(1부터 시작)

  • column : 열 위치(1부터 시작)

  • language_id : 프로그래밍 언어(예: "haskell")

예:

lsp-completions:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

사용 가능한 리소스 나열

사용 가능한 리소스를 찾으려면 MCP resources/list 엔드포인트를 사용하세요. 응답에는 현재 열려 있는 파일에 사용 가능한 모든 리소스가 포함됩니다. 여기에는 다음이 포함됩니다.

  • 모든 열려 있는 파일에 대한 진단 리소스

  • 열려 있는 모든 파일에 대한 호버 정보 템플릿

  • 모든 열려 있는 파일에 대한 코드 완성 템플릿

리소스 업데이트 구독

진단 리소스는 진단 정보가 변경될 때(예: 파일이 수정되어 새로운 오류나 경고가 나타나는 경우) 실시간 업데이트를 수신하는 구독을 ��원합니다. MCP resources/subscribe 엔드포인트를 사용하여 진단 리소스를 구독하세요.

참고: 호버 및 완료 리소스는 특정 시점의 쿼리를 나타내므로 구독을 지원하지 않습니다.

리소스와 도구 활용

LSP 기능에 액세스하기 위해 두 가지 접근 방식 중에서 선택할 수 있습니다.

  1. 도구 기반 접근 방식: get_diagnostics , get_info_on_location , get_completions 도구를 사용하여 간단하고 직접적으로 정보를 가져옵니다.

  2. 리소스 기반 접근 방식: 더욱 RESTful한 접근 방식을 위해 lsp-diagnostics:// , lsp-hover:// , lsp-completions:// 리소스를 사용합니다.

두 가지 접근 방식 모두 동일한 형식으로 동일한 데이터를 제공하고 파일을 먼저 열어야 한다는 동일한 요구 사항을 적용합니다.

문제 해결

  • 서버가 시작되지 않으면 LSP 실행 파일의 경로가 올바른지 확인하세요.

  • 자세한 오류 메시지는 로그 파일(구성된 경우)에서 확인하세요.

특허

MIT 라이센스

확장 프로그램

LSP-MCP 서버는 다양한 프로그래밍 언어에 대한 기능을 향상시키는 언어별 확장 기능을 지원합니다. 확장 기능은 다음과 같은 기능을 제공합니다.

  • 맞춤형 LSP별 도구 및 기능

  • 언어별 리소스 핸들러 및 템플릿

  • 언어 관련 작업을 위한 전문화된 프롬프트

  • 실시간 데이터를 위한 사용자 정의 구독 핸들러

사용 가능한 확장 프로그램

현재 사용 가능한 확장 프로그램은 다음과 같습니다.

  • Haskell : 입력된 구멍 탐색 지침을 포함하여 Haskell 개발을 위한 전문화된 프롬프트를 제공합니다.

확장 기능 사용

서버를 시작할 때 언어 ID를 지정하면 확장 프로그램이 자동으로 로드됩니다.

npx tritlo/lsp-mcp haskell /path/to/haskell-language-server-wrapper lsp

확장 네임스페이스

모든 확장 기능의 네임스페이스는 언어 ID로 지정됩니다. 예를 들어, Haskell 확장 기능의 typed-hole 프롬프트는 haskell.typed-hole-use 로 제공됩니다.

새로운 확장 프로그램 만들기

새로운 확장 프로그램을 만들려면:

  1. src/extensions/ 에 언어 이름을 딴 새 TypeScript 파일을 만듭니다(예: typescript.ts ).

  2. 다음 선택 기능 중 하나를 사용하여 확장 인터페이스를 구현합니다.

    • getToolHandlers() : 사용자 정의 도구 구현 제공

    • getToolDefinitions() : MCP API에서 사용자 정의 도구 정의

    • getResourceHandlers() : 사용자 정의 리소스 핸들러 구현

    • getSubscriptionHandlers() : 사용자 정의 구독 핸들러 구현

    • getUnsubscriptionHandlers() : 사용자 정의 구독 취소 핸들러 구현

    • getResourceTemplates() : 사용자 정의 리소스 템플릿 정의

    • getPromptDefinitions() : 언어 작업에 대한 사용자 정의 프롬프트를 정의합니다.

    • getPromptHandlers() : 사용자 정의 프롬프트 핸들러 구현

  3. 구현 함수를 내보내세요

일치하는 언어 ID가 지정되면 확장 시스템이 자동으로 확장 프로그램을 로드합니다.

감사의 말

  • 언어 서버 프로토콜 구현을 위한 HLS 팀

  • 모델 컨텍스트 프로토콜 사양에 대한 Anthropic

Related MCP Servers

  • -
    security
    -
    license
    -
    quality
    A TypeScript-based server that provides a memory system for Large Language Models (LLMs), allowing users to interact with multiple LLM providers while maintaining conversation history and offering tools for managing providers and model configurations.
    Last updated -
    27
    • Apple
  • -
    security
    -
    license
    -
    quality
    Facilitates enhanced interaction with large language models (LLMs) by providing intelligent context management, tool integration, and multi-provider AI model coordination for efficient AI-driven workflows.
    Last updated -
  • -
    security
    -
    license
    -
    quality
    A Model Context Protocol server that enables LLMs to understand BigQuery dataset structures and execute SQL queries.
    Last updated -
    24
    3
    MIT License
    • Apple
    • Linux
  • A
    security
    -
    license
    A
    quality
    A Model Context Protocol server that enables large language models to interact with Linear's issue tracking system, allowing management of issues, projects, teams, and other Linear resources.
    Last updated -
    19
    12
    MIT License
    • Apple

View all related MCP servers

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/Tritlo/lsp-mcp'

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