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çõesmcp__unison__ucm_add- Adicionar nova definiçãomcp__unison__ucm_run- Executar expressão Unisonmcp__unison__ucm_view- Exibir código-fonte da definiçãomcp__unison__ucm_update- Atualizar definição existentemcp__unison__ucm_ls- Listar conteúdo do namespacemcp__unison__ucm_delete- Excluir definiçãomcp__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 projetosmcp__unison__ucm_switch_project- Alternar projetomcp__unison__ucm_project_create- Criar novo projetomcp__unison__ucm_list_branches- Listar branchesmcp__unison__ucm_switch_branch- Alternar branchmcp__unison__ucm_branch_create- Criar novo branchmcp__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_lsespecificando "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
- Verifique se o caminho do binário está correto
- Verifique se o diretório do projeto existe
- Verifique se o UCM funciona corretamente
Desenvolvimento
Estrutura do projeto:
src/Unison/MCP/Server.hs- Implementação do servidor MCPsrc/Unison/MCP/Protocol.hs- Definições de tipos do protocolo MCPsrc/Unison/MCP/Tools.hs- Implementação das ferramentassrc/Unison/MCP/UCM.hs- Camada de integração com UCM
Licença
Este projeto é distribuído sob a licença MIT.