local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Provides specialized prompts for Haskell development, including typed-hole exploration guidance when working with the Haskell Language Server.
Supports integration with Node.js projects, allowing language models to access language server features for JavaScript and TypeScript codebases.
Enables interaction with TypeScript language servers to provide hover information, code completions, diagnostics, and code actions for TypeScript projects.
LSP MCP 서버
LSP(Language Server Protocol) 인터페이스와 상호 작용하는 MCP(Model Context Protocol) 서버입니다. 이 서버는 LLM이 LSP Hover 및 Completion 제공자에게 쿼리를 보낼 수 있도록 하는 브리지 역할을 합니다.
개요
MCP 서버는 다음과 같이 작동합니다.
- LSP 서버에 연결하는 LSP 클라이언트 시작
- LSP 서버에 요청을 보내는 MCP 도구 노출
- 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 서버 구축
- 이 저장소를 복제하세요:Copy
- 종속성 설치:Copy
- MCP 서버를 빌드합니다.Copy
테스트
이 프로젝트에는 TypeScript LSP 지원에 대한 통합 테스트가 포함되어 있습니다. 이 테스트는 LSP-MCP 서버가 호버 정보, 완성, 진단 및 코드 동작과 같은 LSP 작업을 올바르게 처리하는지 확인합니다.
테스트 실행
TypeScript LSP 테스트를 실행하려면:
또는 구체적으로:
테스트 범위
테스트는 다음 기능을 검증합니다.
- 모의 프로젝트로 TypeScript LSP 초기화
- 분석을 위해 TypeScript 파일 열기
- 함수 및 유형에 대한 호버 정보 가져오기
- 코드 완성 제안 받기
- 진단 오류 메시지 받기
- 오류에 대한 코드 작업 가져오기
테스트 프로젝트는 test/ts-project/
에 있으며, 진단 피드백을 테스트하기 위한 의도적인 오류가 포함된 TypeScript 파일을 포함합니다.
용법
LSP 실행 파일의 경로와 LSP 서버에 전달할 인수를 제공하여 MCP 서버를 실행합니다.
예를 들어:
중요: LSP 서버 시작
버전 0.2.0 이상에서는 LSP 기능을 사용하기 전에 start_lsp
도구를 호출하여 LSP 서버를 명시적으로 시작해야 합니다. 이렇게 하면 올바른 루트 디렉터리로 초기화가 완료되며, 이는 특히 npx와 같은 도구를 사용할 때 중요합니다.
벌채 반출
서버에는 8가지 심각도 수준을 갖춘 포괄적인 로깅 시스템이 포함되어 있습니다.
debug
: 디버깅을 위한 자세한 정보info
: 시스템 작동에 대한 일반 정보 메시지notice
: 중요 운영 이벤트warning
: 주의가 필요할 수 있는 잠재적 문제error
: 작동에 영향을 미치지만 시스템을 중단시키지는 않는 오류 조건critical
: 즉각적인 주의가 필요한 중대한 상황alert
: 시스템이 불안정한 상태입니다emergency
: 시스템을 사용할 수 없습니다
기본적으로 로그는 다음 위치로 전송됩니다.
- 가독성 향상을 위한 색상 코딩이 적용된 콘솔 출력
- 클라이언트에 대한 MCP 알림(
notifications/message
방식을 통해)
디버그 로그 보기
자세한 디버깅을 위해 다음을 수행할 수 있습니다.
- Claude를 실행할 때
claude --mcp-debug
플래그를 사용하면 Claude와 서버 간의 모든 MCP 트래픽을 볼 수 있습니다.Copy set_log_level
도구를 사용하여 런타임에 로그 수준을 변경합니다.Copy
기본 로그 수준은 info
, 자세한 디버그 메시지를 필터링하는 동시에 적당한 운영 세부 정보를 표시합니다.
API
서버는 다음과 같은 MCP 도구를 제공합니다.
위치 정보 얻기
파일의 특정 위치에서 호버 정보를 가져옵니다.
매개변수:
file_path
: 파일 경로language_id
: 파일이 작성된 프로그래밍 언어(예: "haskell")line
: 줄 번호column
: 열 위치
예:
get_completions
파일의 특정 위치에서 완성 제안을 받습니다.
매개변수:
file_path
: 파일 경로language_id
: 파일이 작성된 프로그래밍 언어(예: "haskell")line
: 줄 번호column
: 열 위치
예:
get_code_actions
파일의 특정 범위에 대한 코드 동작을 가져옵니다.
매개변수:
file_path
: 파일 경로language_id
: 파일이 작성된 프로그래밍 언어(예: "haskell")start_line
: 시작 줄 번호start_column
: 시작 열 위치end_line
: 끝 줄 번호end_column
: 끝 열 위치
예:
시작_lsp
지정된 루트 디렉터리로 LSP 서버를 시작합니다. 다른 LSP 관련 도구를 사용하기 전에 이 명령을 호출해야 합니다.
매개변수:
root_dir
: LSP 서버의 루트 디렉토리(절대 경로 권장)
예:
lsp_server를 다시 시작하세요
MCP 서버를 재시작하지 않고 LSP 서버 프로세스를 재시작합니다. 이 기능은 LSP 서버 문제를 복구하거나 LSP 서버 구성에 변경 사항을 적용할 때 유용합니다.
매개변수:
root_dir
: (선택 사항) LSP 서버의 루트 디렉터리입니다. 이 값을 지정하면 서버 재시작 후 이 디렉터리로 초기화됩니다.
root_dir이 없는 예(이전에 설정된 루트 디렉토리 사용):
root_dir의 예:
열린 문서
분석을 위해 LSP 서버에서 파일을 엽니다. 진단에 액세스하거나 파일에 다른 작업을 수행하기 전에 이 함수를 호출해야 합니다.
매개변수:
file_path
: 열려는 파일의 경로language_id
: 파일이 작성된 프로그래밍 언어(예: "haskell")
예:
문서 닫기
작업이 완료되면 LSP 서버에서 파일을 닫습니다. 이는 리소스 관리 및 정리에 도움이 됩니다.
매개변수:
file_path
: 닫을 파일의 경로
예:
진단 받기
하나 또는 모든 열려 있는 파일에 대한 진단 메시지(오류, 경고)를 가져옵니다.
매개변수:
file_path
: (선택 사항) 진단을 받을 파일의 경로입니다. 지정하지 않으면 열려 있는 모든 파일에 대한 진단을 반환합니다.
특정 파일에 대한 예:
열려 있는 모든 파일에 대한 예:
로그 레벨 설정
로그 메시지의 자세한 정도를 제어하기 위해 서버의 로깅 수준을 설정합니다.
매개변수:
level
: 설정할 로깅 수준입니다.debug
,info
,notice
,warning
,error
,critical
,alert
,emergency
중 하나입니다.
예:
MCP 리소스
도구 외에도 서버는 진단, 호버 정보, 코드 완성을 포함한 LSP 기능에 액세스하기 위한 리소스를 제공합니다.
진단 리소스
서버는 lsp-diagnostics://
리소스 스키마를 통해 진단 정보를 제공합니다. 진단 정보가 변경될 때 이러한 리소스를 구독하여 실시간 업데이트를 받을 수 있습니다.
리소스 URI:
lsp-diagnostics://
- 열려 있는 모든 파일에 대한 진단lsp-diagnostics:///path/to/file
- 특정 파일에 대한 진단
중요: 진단에 액세스하려면 먼저 open_document
도구를 사용하여 파일을 열어야 합니다.
호버 정보 리소스
서버는 lsp-hover://
리소스 스키마를 통해 호버 정보를 노출합니다. 이를 통해 파일의 특정 위치에 있는 코드 요소에 대한 정보를 얻을 수 있습니다.
리소스 URI 형식:
매개변수:
line
: 줄 번호(1부터 시작)column
: 열 위치(1부터 시작)language_id
: 프로그래밍 언어(예: "haskell")
예:
코드 완성 리소스
서버는 lsp-completions://
리소스 스키마를 통해 코드 완성 제안을 제공합니다. 이를 통해 파일의 특정 위치에서 완성 후보를 가져올 수 있습니다.
리소스 URI 형식:
매개변수:
line
: 줄 번호(1부터 시작)column
: 열 위치(1부터 시작)language_id
: 프로그래밍 언어(예: "haskell")
예:
사용 가능한 리소스 나열
사용 가능한 리소스를 찾으려면 MCP resources/list
엔드포인트를 사용하세요. 응답에는 현재 열려 있는 파일에 사용 가능한 모든 리소스가 포함됩니다. 여기에는 다음이 포함됩니다.
- 모든 열려 있는 파일에 대한 진단 리소스
- 열려 있는 모든 파일에 대한 호버 정보 템플릿
- 모든 열려 있는 파일에 대한 코드 완성 템플릿
리소스 업데이트 구독
진단 리소스는 진단 정보가 변경될 때(예: 파일이 수정되어 새로운 오류나 경고가 나타나는 경우) 실시간 업데이트를 수신하는 구독을 지원합니다. MCP resources/subscribe
엔드포인트를 사용하여 진단 리소스를 구독하세요.
참고: 호버 및 완료 리소스는 특정 시점의 쿼리를 나타내므로 구독을 지원하지 않습니다.
리소스와 도구 활용
LSP 기능에 액세스하기 위해 두 가지 접근 방식 중에서 선택할 수 있습니다.
- 도구 기반 접근 방식:
get_diagnostics
,get_info_on_location
,get_completions
도구를 사용하여 간단하고 직접적으로 정보를 가져옵니다. - 리소스 기반 접근 방식: 더욱 RESTful한 접근 방식을 위해
lsp-diagnostics://
,lsp-hover://
,lsp-completions://
리소스를 사용합니다.
두 가지 접근 방식 모두 동일한 형식으로 동일한 데이터를 제공하고 파일을 먼저 열어야 한다는 동일한 요구 사항을 적용합니다.
문제 해결
- 서버가 시작되지 않으면 LSP 실행 파일의 경로가 올바른지 확인하세요.
- 자세한 오류 메시지는 로그 파일(구성된 경우)에서 확인하세요.
특허
MIT 라이센스
확장 프로그램
LSP-MCP 서버는 다양한 프로그래밍 언어에 대한 기능을 향상시키는 언어별 확장 기능을 지원합니다. 확장 기능은 다음과 같은 기능을 제공합니다.
- 맞춤형 LSP별 도구 및 기능
- 언어별 리소스 핸들러 및 템플릿
- 언어 관련 작업을 위한 전문화된 프롬프트
- 실시간 데이터를 위한 사용자 정의 구독 핸들러
사용 가능한 확장 프로그램
현재 사용 가능한 확장 프로그램은 다음과 같습니다.
- Haskell : 입력된 구멍 탐색 지침을 포함하여 Haskell 개발을 위한 전문화된 프롬프트를 제공합니다.
확장 기능 사용
서버를 시작할 때 언어 ID를 지정하면 확장 프로그램이 자동으로 로드됩니다.
확장 네임스페이스
모든 확장 기능의 네임스페이스는 언어 ID로 지정됩니다. 예를 들어, Haskell 확장 기능의 typed-hole 프롬프트는 haskell.typed-hole-use
로 제공됩니다.
새로운 확장 프로그램 만들기
새로운 확장 프로그램을 만들려면:
src/extensions/
에 언어 이름을 딴 새 TypeScript 파일을 만듭니다(예:typescript.ts
).- 다음 선택 기능 중 하나를 사용하여 확장 인터페이스를 구현합니다.
getToolHandlers()
: 사용자 정의 도구 구현 제공getToolDefinitions()
: MCP API에서 사용자 정의 도구 정의getResourceHandlers()
: 사용자 정의 리소스 핸들러 구현getSubscriptionHandlers()
: 사용자 정의 구독 핸들러 구현getUnsubscriptionHandlers()
: 사용자 정의 구독 취소 핸들러 구현getResourceTemplates()
: 사용자 정의 리소스 템플릿 정의getPromptDefinitions()
: 언어 작업에 대한 사용자 정의 프롬프트를 정의합니다.getPromptHandlers()
: 사용자 정의 프롬프트 핸들러 구현
- 구현 함수를 내보내세요
일치하는 언어 ID가 지정되면 확장 시스템이 자동으로 확장 프로그램을 로드합니다.
감사의 말
- 언어 서버 프로토콜 구현을 위한 HLS 팀
- 모델 컨텍스트 프로토콜 사양에 대한 Anthropic
This server cannot be installed
대규모 언어 모델과 언어 서버 프로토콜 인터페이스를 연결하여 LLM이 LSP의 호버 정보, 완성, 진단 및 코드 작업에 액세스하여 향상된 코드 제안을 제공할 수 있도록 합니다.