Clojure MCP

Un servidor MCP que proporciona un conjunto completo de herramientas para el desarrollo en Clojure, que requiere un servidor nREPL en ejecución.

Documentación

Clojure MCP: Desarrollo Impulsado por REPL con Asistencia de IA

ClojureMCP es un servidor MCP para Clojure.

Tabla de Contenidos

¿Qué es ClojureMCP?

ClojureMCP es un servidor MCP que conecta un cliente LLM (como Claude Code o Claude Desktop) a tu proyecto Clojure. Proporciona herramientas REPL y herramientas de edición conscientes de Clojure diseñadas para manejar los paréntesis y el formato de Clojure de manera confiable.

Dependiendo de tu cliente LLM, ClojureMCP puede:

  • Proporcionar un conjunto completo de herramientas de asistencia de código conscientes de Clojure para aplicaciones de chat de escritorio como Claude Desktop, o
  • Completar las brechas específicas de Clojure para asistentes CLI que ya tienen excelentes herramientas de edición de archivos y shell (como integración REPL + ediciones conscientes de Clojure).

¿Cómo lo uso?

  1. Instala ClojureMCP (clojure -Ttools install-latest ...).
  2. Regístralo como servidor MCP en tu cliente LLM.

Si estás usando un asistente CLI, normalmente preferirás conservar las herramientas nativas de edición de archivos del CLI y usar ClojureMCP principalmente para la integración REPL (y como respaldo de edición).

Si estás usando una aplicación de chat de escritorio, normalmente usarás el conjunto completo de herramientas de ClojureMCP.

Características Principales

  • Conexión REPL de Clojure - que repara los delimitadores antes de la evaluación
  • Edición consciente de Clojure - usando parinfer, cljfmt y clj-rewrite
  • Conjunto optimizado de herramientas para el desarrollo en Clojure

Ayuda y Recursos de la Comunidad

📋 Instalación

Requisitos previos

  • Clojure
  • Java (JDK 17 o posterior)
  • Opcional pero ALTAMENTE recomendado: ripgrep para un mejor rendimiento de grep y glob_files

Instalar ClojureMCP

Instala ClojureMCP usando el instalador de herramientas de Clojure:

clojure -Ttools install-latest :lib io.github.bhauman/clojure-mcp :as mcp

Esto instala ClojureMCP globalmente, haciendo que clojure -Tmcp start esté disponible desde cualquier directorio.

Asistentes CLI

Los asistentes de codificación CLI (Claude Code, Codex, Gemini CLI) ya tienen excelentes herramientas de edición con diff en línea y herramientas de shell.

Comienza con clojure-mcp-light - proporciona integración REPL y reparación de delimitadores mientras conserva la visualización nativa de diff en línea de tu CLI. Esto funciona bien para la mayoría del desarrollo en Clojure.

Considera agregar ClojureMCP con el perfil :cli-assist si deseas:

  • Respaldo de edición estructural - clojure-mcp-light puede reparar paréntesis después de que una edición tenga éxito, pero no puede ayudar cuando la cadena de coincidencia de buscar/reemplazar no coincide con el código (ocurre menos del 5% de las veces, pero puede desorientar al LLM). La edición estructural apunta a formas por tipo y nombre, evitando este problema.
  • Herramienta REPL de primera clase - Los LLM tienden a usar las herramientas MCP más fácilmente que los comandos CLI, lo que puede llevar a un uso más frecuente del REPL.

Agregar ClojureMCP a clojure-mcp-light puede proporcionar una experiencia de desarrollo en Clojure mejorada para asistentes CLI.

Agregar ClojureMCP con :cli-assist

# Claude Code
claude mcp add clojure-mcp -- clojure -Tmcp start :config-profile :cli-assist

# OpenAI Codex
codex mcp add clojure-mcp -- clojure -Tmcp start :config-profile :cli-assist

# Google Gemini CLI
gemini mcp add clojure-mcp clojure -Tmcp start :config-profile :cli-assist

¿Prefieres las herramientas de edición/lectura de clojure-mcp? Si dejas que el agente tome el control y te importa menos el diff en línea nativo, intercambia :cli-assist por :cli-assist-full. Esto hace que read_file, clojure_edit, clojure_edit_replace_sexp y paren_repair sean de primera clase (en lugar de respaldos) e instruye al asistente para que haga todas las ediciones de archivos Clojure a través de ellas, lo que evita el conflicto de "archivo modificado desde la lectura" del editor anfitrión sin necesidad de configuración de permisos. (Los usuarios avanzados que quieran una garantía estricta pueden agregar adicionalmente reglas de Claude Code permissions.deny como "Edit(/**/*.clj)" para que el editor nativo no pueda tocar los archivos Clojure en absoluto).

Verificar la instalación iniciando el servidor

Desde el directorio de tu proyecto:

clojure -Tmcp start :config-profile :cli-assist

Deberías ver una salida JSON-RPC como esta:

{"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
{"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
{"jsonrpc":"2.0","method":"notifications/resources/list_changed"}
{"jsonrpc":"2.0","method":"notifications/prompts/list_changed"}

Claude Desktop

Las aplicaciones de chat de escritorio (como Claude Desktop) inician servidores MCP fuera del directorio de tu proyecto y no proporcionan herramientas de codificación integradas. En este entorno, normalmente usarás el conjunto completo de herramientas de ClojureMCP y lo conectarás a un nREPL que se ejecute en tu proyecto.

ClojureMCP fue desarrollado inicialmente para convertir a Claude Desktop en un asistente de codificación similar a Claude Code con herramientas diseñadas para trabajar eficazmente con el lenguaje de programación Clojure.

Iniciar un nREPL en tu proyecto

Inicia un servidor nREPL desde el directorio de tu proyecto. Si aún no tienes un alias o configuración de nREPL, consulta doc/nrepl.md.

Configurar Claude Desktop

Elige el ejecutable de shell que tenga más probabilidades de recoger tu configuración de entorno:

Si estás usando Bash, encuentra la ruta explícita del ejecutable bash:

$ which bash
/opt/homebrew/bin/bash

Si estás usando Z Shell, encuentra la ruta explícita del ejecutable zsh:

$ which zsh
/bin/zsh

Ahora vamos a usar esta ruta explícita de shell en el parámetro command en la configuración de Claude Desktop como se ve a continuación.

Crea o edita ~/Library/Application\ Support/Claude/claude_desktop_config.json:

{
    "mcpServers": {
        "clojure-mcp": {
            "command": "/opt/homebrew/bin/bash",
            "args": [
                "-c",
                "clojure -Tmcp start :not-cwd true :port 7888"
            ]
        }
    }
}

La bandera :not-cwd true le indica a ClojureMCP que no use el directorio de trabajo actual (que para Claude Desktop no es tu proyecto). En su lugar, inspecciona la conexión nREPL para descubrir el directorio de trabajo del proyecto.

Esto permite un patrón de trabajo simple: iniciar un REPL en el puerto 7888 y luego iniciar Claude Desktop y permitirle detectar dónde estás trabajando.

Cuando quieras cambiar a un proyecto diferente, detendrías el REPL actual que se ejecuta en 7888 e iniciarías un servidor nREPL en el proyecto en el que quieras trabajar en el puerto 7888.

Probar la configuración

  1. Inicia nREPL en tu proyecto objetivo:

    cd /path/to/your/project
    clojure -M:nrepl
    

    Busca: nREPL server started on port 7888...

  2. Reinicia Claude Desktop (requerido después de cambios de configuración)

  3. Verifica la conexión: En Claude Desktop, haz clic en el botón + en el área de chat. Deberías ver "Add from clojure-mcp" en el menú. Es importante notar que puede tomar unos momentos para que aparezca.

  4. Si hubo un error, consulta la Guía de Solución de Problemas. Si se conectó, ve a la sección Iniciar una nueva conversación en Claude Desktop.

IMPORTANTE: Desactiva las capacidades de Claude Desktop

Ejecución de código y creación de archivos: off

La ejecución de código y la creación de archivos proporcionan herramientas que compiten con ClojureMCP; es mejor desactivarlas.

Ve a configuración > Capacidades > Ejecución de código y creación de archivos y desactívalo.

También es posible que quieras desactivar Artifacts.

Otros clientes además de Claude Desktop

Consulta la Wiki para obtener información sobre cómo configurar otros clientes MCP.

Iniciar una nueva conversación en Claude Desktop

Una vez que todo esté configurado, sugiero iniciar un nuevo chat en Claude.

Lo primero que querrás hacer es inicializar el contexto sobre el proyecto Clojure en la conversación conectada al nREPL.

En Claude Desktop, haz clic en las herramientas + y opcionalmente agrega:

  • recurso PROJECT_SUMMARY.md - (haz que el LLM lo cree) ver abajo
  • recurso Clojure Project Info - que inspecciona el proyecto conectado al nREPL
  • recurso LLM_CODE_STYLE.md - que son tus instrucciones personales de estilo de codificación (copia el que está en este repositorio a la raíz de tu proyecto)
  • prompt clojure_repl_system_prompt - instrucciones sobre cómo codificar - tomado en gran parte de Claude Code

Luego inicia el chat.

Yo comenzaría planteando un problema y luego charlando con el LLM para diseñar interactivamente una solución. Puedes pedirle a Claude que "presente una solución para mi revisión".

Itera un poco sobre eso y luego haz que:

A. codifique y valide la idea en el REPL.

No subestimes las habilidades de los LLM para usar el REPL. Los LLM actuales son absolutamente fantásticos usando el REPL de Clojure.

B. pídele al LLM que haga los cambios en el código fuente y luego que valide el código en el REPL después de la edición de archivos.

C. pídele que ejecute las pruebas. D. pídele que confirme los cambios.

Crea una rama y haz que el LLM confirme a menudo para que no arruine el buen trabajo yendo en una mala dirección.

Gestión del Resumen del Proyecto

Este proyecto incluye un flujo de trabajo para mantener un PROJECT_SUMMARY.md amigable para LLM que ayuda a los asistentes a comprender rápidamente la estructura del código base.

Cómo Funciona

  1. Creación del Resumen: Para generar o actualizar el archivo PROJECT_SUMMARY.md, usa el prompt MCP en el menú + > clojure-mcp create-update-project-summary. Este prompt:

    • Analizará la estructura del código base
    • Documentará archivos clave, dependencias y herramientas disponibles
    • Generará documentación completa en un formato optimizado para asistentes LLM
  2. Uso del Resumen: Al iniciar una nueva conversación con un asistente:

    • El recurso "Project Summary" carga automáticamente PROJECT_SUMMARY.md
    • Esto le da al asistente contexto inmediato sobre la estructura del proyecto
    • El asistente puede proporcionar ayuda más precisa sin una exploración prolongada
  3. Mantenerlo Actualizado: Al final de una sesión productiva donde se agregaron nuevas características o componentes:

    • Invoca el prompt create-update-project-summary nuevamente
    • El sistema actualizará PROJECT_SUMMARY.md con la funcionalidad recién agregada
    • Esto asegura que el resumen se mantenga actualizado con el desarrollo en curso

Este flujo de trabajo crea un ciclo virtuoso donde cada sesión se basa en el conocimiento acumulado de sesiones anteriores, haciendo que el asistente sea cada vez más efectivo a medida que tu proyecto evoluciona.

Resumen y Reanudación de Sesiones de Chat

El servidor Clojure MCP proporciona un par de prompts que permiten la continuidad de la conversación entre sesiones de chat usando la herramienta scratch_pad. Por defecto, los datos se almacenan solo en memoria para la sesión actual. Para persistir los resúmenes entre reinicios del servidor, debes habilitar la persistencia del scratch pad usando las opciones de configuración descritas en la sección de scratch pad.

Cómo Funciona

El sistema usa dos prompts complementarios:

  1. chat-session-summarize: Crea un resumen de la conversación actual

    • Guarda un resumen detallado en el scratch pad
    • Captura lo que se hizo, en qué se está trabajando y qué sigue
    • Acepta un parámetro opcional chat_session_key (por defecto "chat_session_summary")
  2. chat-session-resume: Restaura el contexto de una conversación anterior

    • Lee el archivo PROJECT_SUMMARY.md
    • Llama a clojure_inspect_project para el estado actual del proyecto
    • Recupera el resumen de la sesión anterior del scratch pad
    • Proporciona un breve resumen de 8 líneas sobre dónde se quedó
    • Acepta un parámetro opcional chat_session_key (por defecto "chat_session_summary")

Flujo de Trabajo de Uso

Finalizar una Sesión:

  1. Al final de una conversación productiva, invoca el prompt chat-session-summarize
  2. El asistente almacenará un resumen completo en el scratch pad
  3. Este resumen persiste entre sesiones gracias al estado global del scratch pad

Iniciar una Nueva Sesión:

  1. Al continuar el trabajo, invoca el prompt chat-session-resume
  2. El asistente cargará todo el contexto relevante y proporcionará un breve resumen
  3. Puedes continuar donde lo dejaste con contexto completo

Uso Avanzado con Múltiples Sesiones

Puedes mantener múltiples contextos de conversación en paralelo usando claves personalizadas:

# For feature development
chat-session-summarize with key "feature-auth-system"

# For bug fixing
chat-session-summarize with key "debug-memory-leak"

# Resume specific context
chat-session-resume with key "feature-auth-system"

Esto permite cambiar entre diferentes contextos de desarrollo mientras se mantiene el estado completo de cada hilo de conversación.

Trabajando con Múltiples REPLs

Con list_nrepl_ports, el agente puede descubrir simultáneamente tus REPLs de Clojure y shadow-cljs. La herramienta identifica qué REPLs son instancias de shadow-cljs, permitiendo al agente evaluar en cualquiera de los REPLs usando clojure_eval con el parámetro port apropiado.

Claves de API de LLM

Esto NO es necesario para usar el servidor Clojure MCP.

IMPORTANTE: si tienes las siguientes claves de API configuradas en tu entorno, entonces ClojureMCP realizará llamadas a ellas cuando uses las herramientas dispatch_agent, architect y code_critique. Estas llamadas generarán cargos por uso de API.

Hay algunas herramientas MCP proporcionadas que son agentes en sí mismas y necesitan claves de API para funcionar.

Para usar las herramientas de agente, necesitarás claves de API de uno o más de estos proveedores:

Configuración de Variables de Entorno

Opción 1: Exportar en tu shell

export ANTHROPIC_API_KEY="your-anthropic-api-key-here"
export OPENAI_API_KEY="your-openai-api-key-here"
export GEMINI_API_KEY="your-gemini-api-key-here"

Opción 2: Agregar a tu perfil de shell (.bashrc, .zshrc, etc.)

# Add these lines to your shell profile
export ANTHROPIC_API_KEY="your-anthropic-api-key-here"
export OPENAI_API_KEY="your-openai-api-key-here"
export GEMINI_API_KEY="your-gemini-api-key-here"

Configuración de Claves de LLM para Claude Desktop

Al configurar Claude Desktop, asegúrate de que pueda acceder a tus variables de entorno actualizando tu configuración.

Personalmente, yo source las directamente en el comando bash:

{
    "mcpServers": {
        "clojure-mcp": {
            "command": "/bin/sh",
            "args": [
                "-c",
                "source ~/.api_credentials.sh && PATH=/your/bin/path:$PATH && clojure -Tmcp start :not-cwd true :port 7888"
            ]
        }
    }
}

Nota: Las herramientas de agente funcionarán con cualquier clave de API disponible. No necesitas las tres: solo configura las que tengas disponibles. Las herramientas seleccionarán automáticamente entre los modelos disponibles. Por ahora, la API de ANTHROPIC está limitada a dispatch_agent.

🧰 Herramientas Disponibles

Las herramientas predeterminadas incluidas en main.clj están organizadas por categoría para admitir diferentes flujos de trabajo:

Herramientas de Solo Lectura

Nombre de la HerramientaDescripciónEjemplo de Uso
LSDevuelve una vista de árbol recursiva de archivos y directoriosExplorar la estructura del proyecto
read_fileLector de archivos inteligente con exploración basada en patrones para archivos ClojureLeer archivos con vista colapsada, coincidencia de patrones
grepBúsqueda rápida de contenido usando expresiones regularesEncontrar archivos que contengan patrones específicos
glob_filesBúsqueda de archivos basada en patronesEncontrar archivos por patrones de nombre como *.clj

Evaluación de Código

Nombre de la HerramientaDescripciónEjemplo de Uso
clojure_evalEvalúa código Clojure en el namespace actual; admite el parámetro opcional port para flujos de trabajo con múltiples REPLsProbar expresiones, conectarse a diferentes REPLs
list_nrepl_portsDescubre servidores nREPL en ejecución en la máquinaEncontrar REPLs disponibles para conectarse
bashEjecuta comandos de shell en el sistema hostEjecutar pruebas, comandos git, operaciones de archivos

Herramientas de Edición de Archivos

Nombre de la HerramientaDescripciónEjemplo de Uso
clojure_editEdición de formas de Clojure consciente de la estructuraReemplazar/insertar funciones, manejar defmethod
clojure_edit_replace_sexpModificar expresiones dentro de funcionesCambiar s-expresiones específicas
file_editEditar archivos reemplazando cadenas de textoReparación con parinfer después de la edición si es necesario
file_writeEscribir archivos completos con verificaciones de seguridadCrear nuevos archivos, sobrescribir con validación

Herramientas de Agente (Requieren Claves de API)

Nombre de la HerramientaDescripciónEjemplo de Uso
dispatch_agentLanzar agentes con herramientas de solo lectura para búsquedas complejasExploración y análisis de archivos en múltiples pasos
architectPlanificación técnica y orientación de implementaciónDiseño de sistemas, decisiones de arquitectura

Herramientas Experimentales

Nombre de la HerramientaDescripciónEjemplo de Uso
scratch_padEspacio de trabajo persistente para almacenamiento estructurado de datosSeguimiento de tareas, planificación, comunicación entre herramientas con persistencia de archivos opcional (deshabilitada por defecto)
code_critiqueRevisión de código interactiva y sugerencias de mejoraMejora iterativa de la calidad del código

Características Clave de las Herramientas

Lectura Inteligente de Archivos (read_file)

  • Vista Colapsada: Muestra solo las firmas de funciones para archivos Clojure grandes
  • Coincidencia de Patrones: Usa name_pattern para encontrar funciones por nombre, content_pattern para buscar contenido
  • Soporte de defmethod: Maneja valores de despacho como "area :rectangle" o despachos de vectores
  • Multilenguaje: Los archivos Clojure obtienen características inteligentes, otros archivos muestran contenido sin procesar

Edición Consciente de la Estructura (clojure_edit)

  • Operaciones Basadas en Formas: Apunta a funciones por tipo e identificador, no por coincidencia de texto
  • Múltiples Operaciones: Reemplazar, insertar_antes, insertar_después
  • Validación de Sintaxis: El linting integrado previene paréntesis desbalanceados
  • Manejo de defmethod: Funciona con nombres calificados y valores de despacho

Evaluación de Código (clojure_eval)

  • Integración con REPL: Ejecuta en la sesión nREPL conectada
  • Funciones Auxiliares: Herramientas integradas de exploración de namespaces y símbolos
  • Múltiples Expresiones: Evalúa y particiona múltiples expresiones

Comandos de Shell (bash)

  • Ejecución Configurable: Puede ejecutarse a través de nREPL o localmente según la configuración
  • Aislamiento de Sesión: Cuando se usa el modo nREPL, se ejecuta en una sesión separada para prevenir interferencias con el REPL
  • Truncamiento de Salida: Límite consistente de 8500 caracteres con asignación inteligente de stderr/stdout
  • Seguridad de Rutas: Valida las rutas del sistema de archivos contra los directorios permitidos

Sistema de Agente (dispatch_agent)

  • Búsqueda Autónoma: Maneja tareas de exploración complejas y de múltiples pasos
  • Acceso de Solo Lectura: Los agentes tienen acceso solo a herramientas de lectura
  • Resultados Detallados: Devuelve análisis y hallazgos

Bloc de Notas (scratch_pad)

  • Espacio de Trabajo Persistente: Almacena datos estructurados para planificación y comunicación entre herramientas
  • Solo Memoria: Los datos se almacenan solo en memoria y se pierden cuando la sesión termina (comportamiento predeterminado)
  • Operaciones Basadas en Rutas: Usa set_path, get_path, delete_path para manipulación precisa de datos
  • Compatibilidad con JSON: Almacena cualquier dato compatible con JSON (objetos, arreglos, cadenas, números, booleanos)

🔧 Personalización

ClojureMCP está diseñado para ser altamente personalizable. Durante la fase alfa, crear tu propio servidor MCP personalizado es la forma principal de configurar el sistema según tus necesidades específicas.

Puedes personalizar:

  • Herramientas - Elige qué herramientas incluir, crea nuevas con multimétodos o mapas simples
  • Prompts - Agrega prompts específicos del proyecto para tus flujos de trabajo
  • Recursos - Expón tu documentación, configuración e información del proyecto
  • Selección de Herramientas - Crea servidores de solo lectura, servidores de desarrollo o configuraciones especializadas

El enfoque de personalización es a la vez fácil y empoderador: esencialmente estás construyendo tu propio compañero de desarrollo de IA personalizado.

📖 Documentación Completa de Personalización

Para un inicio rápido: Creando Tu Propio Servidor MCP Personalizado - Aquí es donde la mayoría de los usuarios deberían comenzar.

Opciones de CLI

Los valores pasados a clojure -Tmcp start son valores EDN.

:port

Opcional - El puerto del servidor nREPL al que conectarse. Cuando se usa :start-nrepl-cmd sin :port, el puerto se descubrirá automáticamente desde la salida del comando.

:port 7888

:host

Opcional - El host del servidor nREPL. Se establece por defecto en localhost si no se especifica.

:host "localhost" o :host "0.0.0.0"

:not-cwd

Opcional - Si es verdadero, no uses el directorio de trabajo actual como directorio del proyecto. Requiere que se especifique :port. El servidor MCP inspeccionará la conexión nREPL para descubrir el directorio de trabajo del proyecto.

Esto es esencial para Claude Desktop y otros clientes que lanzan el servidor MCP fuera del directorio de tu proyecto. Al conectarse a un nREPL que se ejecuta en tu proyecto, ClojureMCP puede determinar el directorio de trabajo correcto automáticamente.

:not-cwd true

:start-nrepl-cmd

Opcional - Un comando para iniciar automáticamente un servidor nREPL si uno no está ya en ejecución. Debe especificarse como un vector de cadenas. El servidor MCP iniciará este proceso y gestionará su ciclo de vida.

Cuando se usa sin :port, el servidor MCP analizará automáticamente el puerto desde la salida del comando. Cuando se usa con :port, usará ese puerto fijo en su lugar.

Importante: Esta opción requiere lanzar clojure-mcp desde el directorio de tu proyecto (donde se encuentra tu deps.edn o project.clj). El servidor nREPL se iniciará en el directorio de trabajo actual. Esto es particularmente útil para Claude Code y otros clientes de LLM de línea de comandos donde deseas un inicio automático de nREPL sin gestión manual de procesos.

Nota para usuarios de Claude Desktop: Claude Desktop no inicia servidores MCP desde el directorio de tu proyecto, por lo que :start-nrepl-cmd no funcionará a menos que también proporciones :project-dir como argumento de línea de comandos que apunte a tu proyecto específico. Por ejemplo: :project-dir '"/path/to/your/clojure/project"'. Esta limitación no afecta a Claude Code ni a otras herramientas basadas en CLI que ejecutas desde el directorio de tu proyecto.

:start-nrepl-cmd ["lein" "repl" ":headless"] o :start-nrepl-cmd ["clojure" "-M:nrepl"]

:fallback-nrepl

Opcional - Cuando true, ClojureMCP primero intentará conectarse a :port. Si no hay nada escuchando allí (o :port se omite por completo), genera un nREPL local en un puerto efímero y se conecta a ese. El mecanismo de respaldo nunca ocupa tu :port configurado, por lo que una sesión posterior del editor aún puede reclamarlo.

Esto está destinado a usuarios que no siempre tienen un nREPL gestionado por el editor en ejecución, por ejemplo, al lanzar Claude Desktop sin iniciar primero un REPL del proyecto, o al trabajar en proyectos pequeños a través de Vim. Sin esta bandera, ClojureMCP falla al iniciar si no puede alcanzar :port, lo que Claude Desktop muestra como un error de "Servidor desconectado".

El comando predeterminado se construye a partir de la dependencia nREPL del propio clojure-mcp (por lo que no se codifica ninguna versión) y se ejecuta a través de clojure -Sdeps ... -M -m nrepl.cmdline. El ~/.clojure/deps.edn del usuario aún se fusiona mediante la CLI de clojure, por lo que las bibliotecas que mantienes disponibles globalmente (por ejemplo, Criterium) permanecen en el classpath del REPL generado.

El proceso generado se limpia automáticamente cuando el servidor MCP se apaga.

:fallback-nrepl true

:fallback-nrepl-cmd

Opcional - Anula el comando de respaldo predeterminado. Debe ser un vector de cadenas. Solo se usa cuando :fallback-nrepl es true. No incluyas un puerto explícito en el comando; el lanzador necesita analizar el puerto descubierto desde la salida del proceso.

:fallback-nrepl-cmd ["lein" "repl" ":headless"]

:fallback-nrepl-dir

Opcional - Directorio de trabajo para el REPL de respaldo generado. Se establece por defecto en :project-dir si está configurado, de lo contrario en $HOME. Útil cuando deseas que el REPL de respaldo recoja el deps.edn de un proyecto automáticamente.

:fallback-nrepl-dir "/path/to/scratch"

:config-file

Opcional - Especifica la ubicación de un archivo de configuración. Debe ser una ruta a un archivo existente.

:config-file "/path/to/config.edn"

:project-dir

Opcional - Especifica el directorio de trabajo para tu base de código. Esto anula la introspección automática del directorio del proyecto desde la conexión nREPL. Debe ser una ruta a un directorio existente.

:project-dir "/path/to/your/clojure/project"

:nrepl-env-type

Opcional - Especifica el tipo de entorno al que nos estamos conectando a través de la conexión nREPL. Esto anula la detección automática. Las opciones válidas son:

  • :clj para Clojure o ClojureScript
  • :bb para Babashka - Intérprete de Clojure nativo y de arranque rápido para scripting
  • :basilisp para Basilisp - Un dialecto Lisp compatible con Clojure dirigido a Python 3.9+
  • :scittle para Scittle - Ejecuta ClojureScript directamente desde etiquetas script del navegador

:nrepl-env-type :bb

:shadow-cljs-repl-message

Opcional - Controla si el mensaje de estado del modo REPL de shadow-cljs se incluye en los resultados de evaluación (predeterminado: true). Cuando está conectado a un nREPL de shadow-cljs, se antepone un mensaje de estado sobre el modo CLJS a cada resultado de evaluación. Establézcalo en false para deshabilitar este mensaje.

:shadow-cljs-repl-message false

:config-profile

Opcional - Carga un perfil de configuración integrado que ajusta la disponibilidad y las descripciones de las herramientas. Útil para adaptar ClojureMCP a casos de uso específicos.

Perfiles disponibles:

  • :cli-assist - Conjunto de herramientas mínimo para asistentes de codificación CLI (Claude Code, Codex, Gemini CLI). Deshabilita herramientas redundantes y configura clojure_edit como respaldo para cuando la edición nativa falla.
  • :cli-assist-full - Similar a :cli-assist, pero promueve las herramientas read_file, clojure_edit, clojure_edit_replace_sexp y paren_repair de clojure-mcp a herramientas de primera clase (sin marco de "respaldo") para un flujo de trabajo impulsado por agentes. Sus instrucciones guían al asistente para enrutar todas las ediciones de archivos Clojure a través de las herramientas de clojure, lo que evita el conflicto del editor anfitrión de "archivo modificado desde la lectura" sin necesidad de configuración de permisos del anfitrión.

:config-profile :cli-assist

:enable-tools

Opcional - Lista de permitidos de palabras clave de herramientas. Cuando se proporciona, reemplaza cualquier valor de :enable-tools de la configuración. Solo las herramientas listadas estarán disponibles.

:enable-tools [:clojure_eval :read_file]

:disable-tools

Opcional - Lista de bloqueados de palabras clave de herramientas. Cuando se proporciona, reemplaza cualquier valor de :disable-tools de la configuración. Las herramientas listadas estarán deshabilitadas.

:disable-tools [:bash :dispatch_agent]

:add-tools

Opcional - Fuerza la habilitación de herramientas específicas después de la resolución de configuración. Elimina herramientas de la lista de deshabilitadas y las agrega a la lista de habilitadas si una está activa. Esto es útil para re-habilitar selectivamente herramientas que un perfil de configuración deshabilita.

:add-tools [:my_custom_agent]

:remove-tools

Opcional - Fuerza la deshabilitación de herramientas específicas después de la resolución de configuración. Agrega herramientas a la lista de deshabilitadas y las elimina de la lista de habilitadas si una está activa. Esto es útil para deshabilitar selectivamente herramientas sin reemplazar toda la configuración.

:remove-tools [:clojure_eval]

Orden de aplicación del filtrado de herramientas

  1. Configuración cargada (fusión de hogar + proyecto + perfil)
  2. :enable-tools/:disable-tools de las opciones reemplazan los valores de configuración (si se proporcionan)
  3. :remove-tools aplicado (fuerza-deshabilitación)
  4. :add-tools aplicado (fuerza-habilitación — gana sobre :remove-tools en superposición)
  5. Las variables de entorno ENABLE_TOOLS/DISABLE_TOOLS aún ganan sobre todo

Consulte Filtrado de componentes para obtener detalles sobre cómo funcionan las listas de habilitación/deshabilitación en los archivos de configuración.

Ejemplo de uso

# Basic usage with just port
clojure -Tmcp start :port 7888

# With automatic nREPL server startup and port discovery
# Perfect for CLI assistants - run this from your project directory
clojure -Tmcp start :start-nrepl-cmd '["lein" "repl" ":headless"]'

# For deps.edn projects (from project directory)
clojure -Tmcp start :start-nrepl-cmd '["clojure" "-M:nrepl"]'

# Auto-start with explicit port (uses fixed port, no parsing)
clojure -Tmcp start :port 7888 :start-nrepl-cmd '["clojure" "-M:nrepl"]'

# Attach to port 7888 if available, otherwise spawn a fallback nREPL on
# an ephemeral port. Useful for Claude Desktop when you don't always
# have an editor-managed REPL running.
clojure -Tmcp start :not-cwd true :port 7888 :fallback-nrepl true

# For Claude Desktop: must provide project-dir since it doesn't run from your project
clojure -Tmcp start :start-nrepl-cmd '["lein" "repl" ":headless"]' :project-dir '"/path/to/your/clojure/project"'

# With custom host and project directory
clojure -Tmcp start :port 7888 :host '"0.0.0.0"' :project-dir '"/path/to/project"'

# Using a custom config file
clojure -Tmcp start :port 7888 :config-file '"/path/to/custom-config.edn"'

# Specifying Babashka environment
clojure -Tmcp start :port 7888 :nrepl-env-type :bb

# Using cli-assist profile for CLI coding assistants
clojure -Tmcp start :config-profile :cli-assist

# Like cli-assist, but clojure-mcp's read/edit tools are first-class (agent-driven workflow)
clojure -Tmcp start :config-profile :cli-assist-full

# cli-assist with a custom agent tool re-enabled
clojure -Tmcp start :config-profile :cli-assist :add-tools '[:my_custom_agent]'

# cli-assist but also remove clojure_eval
clojure -Tmcp start :config-profile :cli-assist :remove-tools '[:clojure_eval]'

# Full override — only these two tools
clojure -Tmcp start :enable-tools '[:clojure_eval :read_file]'

Nota: Los valores de cadena deben estar correctamente entre comillas para el shell, de ahí la sintaxis '"value"' para cadenas.

⚙️ Configuración

El servidor Clojure MCP admite una configuración mínima específica del proyecto a través de un archivo .clojure-mcp/config.edn en el directorio raíz de su proyecto. Esta configuración proporciona controles de seguridad y opciones de personalización para el servidor MCP.

Ubicación del archivo de configuración

Cree un archivo .clojure-mcp/config.edn en la raíz de su proyecto:

your-project/
├── .clojure-mcp/
│   └── config.edn
├── src/
├── deps.edn
└── ...

Opciones de configuración

La configuración está extensamente documentada aquí.

Ejemplo de configuración

{:allowed-directories ["."
                       "src"
                       "test"
                       "resources"
                       "dev"
                       "/absolute/path/to/shared/code"
                       "../sibling-project"]
 :write-file-guard :partial-read
 :cljfmt false
 :bash-over-nrepl false}

Detalles de configuración

Resolución de rutas:

  • Las rutas relativas (como "src", "../other-project") se resuelven en relación con la raíz de su proyecto
  • Las rutas absolutas (como "/home/user/shared") se usan tal cual
  • El directorio raíz del proyecto se incluye automáticamente en los directorios permitidos

Seguridad:

  • Las herramientas validan todas las operaciones de archivos contra los directorios permitidos
  • Los intentos de acceder a archivos fuera de los directorios permitidos fallarán con un error
  • Esto evita el acceso accidental a archivos sensibles del sistema
  • la herramienta Bash no respeta estos límites, así que tenga cuidado

Comportamiento predeterminado:

  • Sin un archivo de configuración, solo el directorio del proyecto y sus subdirectorios son accesibles
  • El directorio de trabajo de nREPL se agrega automáticamente a los directorios permitidos

Nota: La configuración se carga cuando se inicia el servidor MCP. Reinicie el servidor (o el Agente de Chat) después de realizar cambios de configuración.

📝 Licencia

Eclipse Public License - v 2.0

Copyright (c) 2025 Bruce Hauman

Este programa y los materiales adjuntos se ponen a disposición bajo los términos de la Licencia Pública de Eclipse 2.0, disponible en http://www.eclipse.org/legal/epl-2.0

Resumen de la licencia

  • Úselo libremente para proyectos personales, herramientas comerciales internas y desarrollo
  • Modifique y distribuya - las mejoras y bifurcaciones son bienvenidas
  • Uso comercial - las empresas pueden usarlo comercialmente sin restricciones
  • Licencia flexible - se puede combinar con código propietario
  • 📤 Comparta mejoras - el código fuente debe estar disponible cuando se distribuya