Skip to main content
Glama
JohanCodinha

nREPL MCP Server

by JohanCodinha

nREPL MCP 서버

Claude Desktop 이나 VSCode의 CLine 과 같은 MCP 클라이언트용으로 설계된 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버는 CLine과 함께 사용하면 모든 LLM과 함께 사용할 수 있습니다. 이 서버는 실행 중인 Clojure nREPL 인스턴스 와 상호 작용하여 MCP를 통해 Clojure 코드 평가, 네임스페이스 검사 및 기타 유틸리티를 수행할 수 있도록 합니다.


특징

  • 호스트와 포트를 지정하여 실행 중인 nREPL 서버에 연결합니다 .

  • 주어진 네임스페이스나 현재 네임스페이스에서 Clojure 코드를 평가합니다 .

  • tools.namespace 사용하여 프로젝트 네임스페이스를 나열합니다 .

  • 호스트, 포트, 세션 세부 정보를 포함한 nREPL 연결 상태를 검색합니다 .

  • 모든 Clojure 네임스페이스의 공개 변수를 검사하여 docstring 및 값과 같은 메타데이터를 표시합니다.


Related MCP server: mcp-nrepl

설치 및 설정

CLine(VSCode) 또는 Claude Desktop에 설치

이 서버를 CLine 또는 Claude Desktop 과 함께 사용하려면 다음 단계를 따르세요.

  1. VSCode나 Claude Desktop 에서 CLine을 엽니다.

  2. MCP 설정 으로 이동합니다.

  3. 다음 구성으로 새로운 MCP 서버를 추가합니다.

    지엑스피1

  4. 변경 사항을 적용하려면 클라이언트를 저장하고 다시 시작하세요.

이를 통해 클라이언트는 표준 입출력을 통해 nREPL MCP 서버와 통신할 수 있습니다.

npx 를 통해 설치

저장소를 복제하지 않고 서버를 빠르게 실행하려면:

npx nrepl-mcp-server

수동 설치

  1. 저장소를 복제합니다

  2. 종속성 설치

    npm install
  3. 프로젝트 빌드 (TypeScript를 JavaScript로 변환)

    npm run build
  4. 서버를 실행하세요

    • 프로덕션 모드 : 컴파일된 출력에서 실행됩니다.

      npm start
    • 개발 모드 : 실시간 변경 사항에 ts-node를 사용합니다.

      npm run dev

이렇게 하면 서버가 시작되고 STDIO 에서 MCP 요청을 수신합니다. MCP 클라이언트가 서버를 자동으로 시작합니다.


행위

nREPL에 연결

호스트 와 포트를 지정하여 nREPL 서버에 대한 연결을 설정할 수 있습니다.

Clojure 코드 평가

기본 네임스페이스 나 지정된 네임스페이스 에서 임의의 Clojure 표현식을 실행합니다.

네임스페이스 정보 검색

tools.namespace 사용하여 현재 프로젝트 디렉토리에 있는 모든 네임스페이스를 나열합니다.

공공 변수 검사

지정된 네임스페이스의 모든 공개 변수 에 대한 메타데이터와 현재 값을 가져옵니다.

nREPL 연결 상태 가져오기

호스트, 포트, 세션 ID, 마지막 오류(있는 경우)를 포함하여 현재 nREPL 연결에 대한 세부 정보를 제공합니다.


자원

nrepl://status

다음을 포함하여 현재 nREPL 연결에 대한 정보를 제공합니다.

  • 호스트 및 포트

  • 연결 상태

  • 활성 세션 ID

nrepl://namespaces

프로젝트 디렉토리에서 감지된 모든 네임스페이스를 나열합니다.


기여하다

기여를 환영합니다! 기능 제안이나 버그 리포트가 있으시면 이슈를 개설하거나 풀 리퀘스트를 보내주세요.

특허

이 프로젝트는 MIT 라이선스 에 따라 라이선스가 부여됩니다. 해당 조건에 따라 자유롭게 수정하고 배포할 수 있습니다.

Available Tools

3 tools
connectB

Connect to an nREPL server. Example: (connect {:host "localhost" :port 1234})

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesnREPL server host
portYesnREPL server port

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Connect') but does not disclose behavioral traits such as whether this is a one-time or persistent connection, error handling, authentication needs, or what happens upon successful connection. The example adds minimal context but leaves key operational details unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, with the first sentence stating the purpose clearly and the second providing a practical example. Every sentence earns its place by reinforcing understanding without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a connection tool with no annotations and no output schema, the description is incomplete. It lacks information about what the tool returns upon success or failure, connection persistence, or error conditions, which are critical for an agent to use it effectively in a workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with both parameters ('host' and 'port') well-documented in the schema. The description adds an example that illustrates parameter usage but does not provide additional semantic meaning beyond what the schema already specifies, such as format constraints or default values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Connect to') and target resource ('an nREPL server'), with an example that reinforces the purpose. It distinguishes itself from sibling tools like 'eval_form' and 'get_ns_vars' by focusing on establishing a connection rather than evaluating code or retrieving namespace variables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to establish a connection to an nREPL server, but it does not provide explicit guidance on when to use this tool versus alternatives or any prerequisites. The example suggests typical usage scenarios but lacks context about timing or dependencies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eval_formA

Evaluate Clojure code in a specific namespace or the current one. Examples:

  • Define and call a function: {"code": "(defn greet [name] (str "Hello, " name "!"))(greet "World"))"}

  • Reload code: {"code": "(clj-reload.core/reload)"}

  • Evaluate in a specific namespace: {"code": "(clojure.repl.deps/sync-deps)", "ns": "user"}

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesClojure code to evaluate
nsNoOptional namespace to evaluate in. Changes persist for subsequent evaluations.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that namespace changes 'persist for subsequent evaluations,' which is useful behavioral context. However, it lacks details on error handling, side effects, or performance implications, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with a clear purpose statement followed by specific examples. Each sentence earns its place by illustrating use cases without unnecessary elaboration, making it efficient and easy to understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (evaluating code with potential side effects), no annotations, and no output schema, the description is moderately complete. It covers purpose and usage examples but lacks details on return values, error formats, or security considerations, which are important for a code evaluation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters ('code' and 'ns'). The description adds value by providing examples that illustrate parameter usage, such as showing code snippets and namespace context, but does not add new semantic details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Evaluate Clojure code in a specific namespace or the current one.' It specifies the verb ('evaluate'), resource ('Clojure code'), and scope ('specific namespace or the current one'), distinguishing it from sibling tools like 'connect' and 'get_ns_vars' which likely serve different functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage through examples, such as defining functions, reloading code, and evaluating in a namespace. However, it does not explicitly state when to use this tool versus alternatives like 'get_ns_vars' or any exclusions, leaving some ambiguity in tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ns_varsB

Get all public vars (functions, values) in a namespace with their metadata and current values. Example:

  • List main namespace vars: (get_ns_vars {:ns "main"}) Returns a map where keys are var names and values contain:

  • :meta - Metadata including :doc string, :line number, :file path

  • :value - Current value of the var

ParametersJSON Schema
NameRequiredDescriptionDefault
nsYesNamespace to inspect

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the return format (a map with keys as var names and values containing metadata and current values), which is helpful, but doesn't cover aspects like permissions needed, rate limits, error conditions, or whether it's a read-only operation (though 'Get' implies reading).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose in the first sentence. The example and return format details are useful but could be slightly more streamlined. Overall, it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (1 parameter, no output schema, no annotations), the description is somewhat complete but has gaps. It explains the return structure well, but lacks information on usage context, error handling, and behavioral traits like safety or performance considerations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single parameter 'ns' as 'Namespace to inspect'. The description adds an example usage with {:ns "main"} but doesn't provide additional semantic context beyond what the schema states, such as namespace format or scope limitations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'all public vars (functions, values) in a namespace with their metadata and current values', which is specific and comprehensive. It distinguishes from sibling tools (connect, eval_form) by focusing on namespace inspection rather than connection or evaluation operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It includes an example usage but doesn't mention prerequisites, constraints, or compare it to sibling tools like eval_form, which might also interact with namespace variables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • First observedconnect
    • First observedeval_form
    • First observedget_ns_vars

TDQS

A3.5/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: connect establishes a connection, eval_form evaluates code, and get_ns_vars inspects namespace variables. There is no overlap or ambiguity between these three functions.

Naming Consistency4/5

The naming follows a consistent snake_case pattern (connect, eval_form, get_ns_vars), with all tools using descriptive verb-noun combinations. The minor deviation is that 'connect' is a single verb while others are compound, but this is reasonable given its action.

Tool Count3/5

With only 3 tools, the set feels thin for an nREPL server, which typically involves more operations like disconnecting, listing sessions, or handling side effects. However, it covers basic connectivity, evaluation, and inspection, which are core functions.

Completeness2/5

The tool surface has significant gaps for an nREPL server: there is no way to disconnect or manage sessions, handle errors or interrupts, load files, or perform other common REPL operations. This limits agents to basic tasks and may cause failures in more complex workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects to nREPL servers to evaluate Clojure code interactively, enabling AI assistants like Claude to run Clojure code in real-time.
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables ISLI agents and MCP clients to dispatch natural-language coding and terminal tasks to a locally-installed Claude Code CLI, supporting both one-shot execution and persistent sessions with workspace and security controls.
    -