Unison MCP Server

Um servidor MCP para a linguagem Unison, permitindo que assistentes de IA interajam com o Unison Codebase Manager (UCM).

Documentação

unison-mcp-server

Implementação do servidor Model Context Protocol (MCP) para a linguagem Unison. Permite que assistentes de IA operem o UCM (Unison Codebase Manager).

Visão geral

Este projeto fornece uma interface MCP para interagir com codebases Unison, permitindo que assistentes de IA executem as seguintes operações:

  • Busca de definições
  • Adição e atualização de código
  • Execução de expressões Unison
  • Gerenciamento de projetos e branches
  • Análise de dependências

Pré-requisitos

1. Instalação do Unison

# macOS (Homebrew)
brew install unisonweb/unison/unison-language

# その他のOS
# https://www.unison-lang.org/install/ から最新版をダウンロード

2. Configuração do Haskell

# Stack(Haskellビルドツール)のインストール
curl -sSL https://get.haskellstack.org/ | sh

# または
wget -qO- https://get.haskellstack.org/ | sh

Configuração

1. Clonar o repositório

git clone https://github.com/yourusername/unison-mcp-server.git
cd unison-mcp-server

2. Build

stack build

3. Registro no Claude Desktop

Configuração manual

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou o caminho correspondente, adicione o seguinte:

{
  "mcpServers": {
    "unison": {
      "command": "/path/to/unison-mcp-server/.stack-work/install/.../bin/unison-mcp-server-exe",
      "args": ["/path/to/your/unison/project"]
    }
  }
}

Usando claude mcp add (recomendado)

# ビルドしたバイナリのパスを確認
stack path --local-install-root

# Claude MCP に追加
claude mcp add unison /path/to/binary/unison-mcp-server-exe /path/to/your/unison/project

Uso

Configuração inicial

Para iniciar um novo projeto Unison:

# ターミナルで
cd /path/to/your/unison/project
ucm

# UCM内で
.myproject> project.create myproject

Integração com UCM

Para iniciar o UCM usando o mesmo codebase do servidor MCP:

# MCPサーバーのディレクトリから起動
cd /path/to/unison-mcp-server
ucm

# または、どこからでも --codebase オプションを使用
ucm --codebase /path/to/unison-mcp-server/.unison

Isso dá acesso ao mesmo projeto e branch do servidor MCP.

Exemplo de uso com Claude

Use prompts como o seguinte no Claude Desktop:

unison mcp を使ってコードを書いてみて

Demonstração de execução

Abaixo está um exemplo de uso real:

-- 基本的な関数定義
id : a -> a
id x = x

-- リスト操作
head : [a] -> Optional a
head = cases
  [] -> None
  x +: _ -> Some x

-- 高階関数
map : (a -> b) -> [a] -> [b]
map f = cases
  [] -> []
  x +: xs -> f x +: map f xs

-- フィルター関数
filter : (a -> Boolean) -> [a] -> [a]
filter p = cases
  [] -> []
  x +: xs -> if p x then x +: filter p xs else filter p xs

Arquitetura

┌─────────────┐     JSON-RPC      ┌──────────────┐
│ AI Assistant│ ←───────────────→ │  MCP Server  │
└─────────────┘                   └──────┬───────┘
                                         │
                                         v
                                   ┌─────────────┐
                                   │     UCM     │
                                   └─────────────┘

Ferramentas disponíveis

As seguintes ferramentas estão disponíveis como ferramentas MCP:

Operações básicas

  • mcp__unison__ucm_find - Busca de definições
  • mcp__unison__ucm_add - Adicionar nova definição
  • mcp__unison__ucm_run - Executar expressão Unison
  • mcp__unison__ucm_view - Exibir código-fonte da definição
  • mcp__unison__ucm_update - Atualizar definição existente
  • mcp__unison__ucm_ls - Listar conteúdo do namespace
  • mcp__unison__ucm_delete - Excluir definição
  • mcp__unison__ucm_test - Executar testes (gera scratch.u automaticamente se não existir)
  • mcp__unison__ucm_dependencies - Exibir dependências da definição

Gerenciamento de projetos

  • mcp__unison__ucm_list_projects - Listar projetos
  • mcp__unison__ucm_switch_project - Alternar projeto
  • mcp__unison__ucm_project_create - Criar novo projeto
  • mcp__unison__ucm_list_branches - Listar branches
  • mcp__unison__ucm_switch_branch - Alternar branch
  • mcp__unison__ucm_branch_create - Criar novo branch
  • mcp__unison__ucm_merge - Mesclar branch

Gerenciamento de bibliotecas

  • mcp__unison__ucm_lib_install - Instalar biblioteca (ex.: @unison/base)
  • mcp__unison__ucm_share_search - Exibir informações de bibliotecas do Unison Share (busca real não suportada)
  • mcp__unison__ucm_share_install - Instalar versão específica do Unison Share
  • Após a instalação: verifique com mcp__unison__ucm_ls especificando "lib"
  • Convenção de nomenclatura: @owner/library → lib.owner_library_version

Execução de comandos genéricos

  • mcp__unison__ucm_command - Executar qualquer comando UCM diretamente
    • Ferramenta de baixo nível: verifique a sintaxe do comando e os requisitos de tipo antes de usar
    • Erros do UCM são retornados como estão
    • Exemplo: {"command": "pull", "args": ["@unison/base/main"]}
    • Exemplo: {"command": "fork", "args": ["testUuid", "myTests.uuid"]}
    • Suporta comandos UCM adicionados futuramente

Exemplo de uso de biblioteca

-- baseライブラリをインストール後
use lib.unison_base_3_21_0

-- UUIDの生成
testUuid : '{IO, Exception} ()
testUuid = do
  uuid = Uuid.parse "550e8400-e29b-41d4-a716-446655440000"
  printLine (Uuid.toText uuid)

-- nanoidライブラリをインストール後
use lib.hojberg_nanoid_1_0_0
use lib.hojberg_nanoid_1_0_0.NanoId

-- NanoIDの生成
testNanoId : '{IO, Exception} ()
testNanoId = do
  id = nanoid()
  printLine (NanoId.toText id)

Solução de problemas

Se o UCM não for encontrado

# PATHにUCMがあるか確認
which ucm

# なければPATHに追加
export PATH=$PATH:/path/to/unison/bin

Em caso de erros de build

# 依存関係を更新
stack update

# クリーンビルド
stack clean
stack build

Em caso de erros de conexão MCP

  1. Verifique se o caminho do binário está correto
  2. Verifique se o diretório do projeto existe
  3. Verifique se o UCM funciona corretamente

Desenvolvimento

Estrutura do projeto:

  • src/Unison/MCP/Server.hs - Implementação do servidor MCP
  • src/Unison/MCP/Protocol.hs - Definições de tipos do protocolo MCP
  • src/Unison/MCP/Tools.hs - Implementação das ferramentas
  • src/Unison/MCP/UCM.hs - Camada de integração com UCM

Licença

Este projeto é distribuído sob a licença MIT.