HexDocs MCP
Pesquisa semântica para documentação de pacotes Hex. Requer instalação local de Elixir e Mix.
Documentação
HexDocs MCP
HexDocs MCP é um projeto que fornece recursos de busca semântica para documentação de pacotes Hex, projetado especificamente para aplicações de IA. Ele consiste em dois componentes principais:
- Um binário Elixir que baixa, processa e gera embeddings a partir da documentação de pacotes Hex
- Um servidor TypeScript que implementa o Model Context Protocol (MCP) e chama o binário Elixir para buscar e pesquisar documentação
[!CAUTION] Esta documentação reflete o estado atual de desenvolvimento no branch main. Para documentação sobre a versão estável mais recente, consulte a página da versão mais recente e o branch da versão mais recente.
Instalação
Configuração do Cliente MCP
O servidor MCP TypeScript implementa o Model Context Protocol (MCP) e é projetado para ser usado por clientes compatíveis com MCP, como Cursor, Claude Desktop App, Continue e outros. O servidor fornece ferramentas para busca semântica da documentação Hex. Para uma lista completa de clientes compatíveis com MCP, consulte a documentação de Clientes MCP.
Adicione isto à configuração JSON do MCP do seu cliente:
{
"mcpServers": {
"hexdocs-mcp": {
"command": "npx",
"args": [
"-y",
"hexdocs-mcp@0.5.0"
]
}
}
}
Este comando baixará automaticamente os binários Elixir para buscar e pesquisar documentação. Embora o servidor gerencie o download dos binários, você ainda precisa ter Elixir e Mix instalados no seu sistema para que a funcionalidade de busca do HexDocs funcione corretamente.
Smithery
Alternativamente, você pode usar o Smithery para adicionar automaticamente o servidor MCP à configuração do seu cliente.
Por exemplo, para o Cursor, você pode usar o seguinte comando:
npx -y @smithery/cli@latest install @bradleygolden/hexdocs-mcp --client cursor
Pacote Elixir
Alternativamente, você pode adicionar o pacote hexdocs_mcp ao seu projeto se não quiser usar o servidor MCP.
{:hexdocs_mcp, "~> 0.5.0", only: :dev, runtime: false}
E se você usar floki ou outras dependências marcadas como disponíveis apenas em outro ambiente, atualize-as para que fiquem disponíveis também no ambiente :dev.
Por exemplo, floki é comumente usado em :test:
{:floki, ">= 0.30.0", only: :test}
Mas você pode atualizá-lo para que fique disponível no ambiente :dev:
{:floki, ">= 0.30.0", only: [:dev, :test]}
Requisitos
- Ollama - Necessário para gerar embeddings
- Execute
ollama pull mxbai-embed-largepara baixar o modelo de embedding recomendado - Certifique-se de que o Ollama esteja em execução antes de usar os recursos de embedding
- Execute
- Elixir 1.16+ e Erlang/OTP 26+
- Instalados automaticamente em ambientes CI
- Necessários localmente para desenvolvimento
- Mix - A ferramenta de build do Elixir (incluída na instalação do Elixir)
- Node.js 22 ou posterior (para o servidor MCP)
Mudança Importante: Migração de Modelo (v0.6.0+)
⚠️ IMPORTANTE: A versão 0.6.0 introduz uma mudança importante no modelo de embedding padrão.
O que mudou:
- O modelo padrão mudou de
nomic-embed-text(384 dimensões) paramxbai-embed-large(1024 dimensões) - Os embeddings existentes são incompatíveis e serão limpos durante a atualização
Para atualizar:
-
Baixe o novo modelo:
ollama pull mxbai-embed-large -
Seus embeddings existentes serão limpos automaticamente na primeira execução de qualquer comando
-
Regere os embeddings para seus pacotes:
mix hex.docs.mcp fetch_docs phoenix
Por que esta mudança: mxbai-embed-large fornece qualidade de busca semântica significativamente melhor e dimensões consistentes em todas as plataformas (Windows/macOS/Linux).
Configuração
Variáveis de Ambiente
As seguintes variáveis de ambiente podem ser usadas para configurar a ferramenta:
| Variável | Descrição | Padrão |
|---|---|---|
HEXDOCS_MCP_PATH | Caminho onde os dados serão armazenados | ~/.hexdocs_mcp |
HEXDOCS_MCP_MIX_PROJECT_PATHS | Lista separada por vírgulas de caminhos para arquivos mix.exs | (nenhum) |
Exemplos:
# Set custom storage location
export HEXDOCS_MCP_PATH=/path/to/custom/directory
# Configure common project paths to avoid specifying --project flag each time
export HEXDOCS_MCP_MIX_PROJECT_PATHS="/path/to/project1/mix.exs,/path/to/project2/mix.exs"
Configuração do Servidor MCP
Você também pode configurar variáveis de ambiente na configuração do MCP para o servidor:
{
"mcpServers": {
"hexdocs-mcp": {
"command": "...",
"args": [
"..."
],
"env": {
"HEXDOCS_MCP_PATH": "/path/to/custom/directory",
"HEXDOCS_MCP_MIX_PROJECT_PATHS": "/path/to/project1/mix.exs,/path/to/project2/mix.exs"
}
}
}
}
Uso
Ferramentas de IA
O servidor MCP pode ser usado por qualquer ferramenta de IA compatível com MCP. O servidor buscará automaticamente a documentação quando necessário e a armazenará no diretório de dados configurado.
Observe que pacotes grandes podem levar tempo para baixar e processar.
Pacote Elixir
O banco de dados SQLite para armazenamento e recuperação de vetores é criado automaticamente quando necessário.
Busque documentação, processe e gere embeddings para um pacote:
mix hex.docs.mcp fetch_docs phoenix
Busque documentação para uma versão específica:
mix hex.docs.mcp fetch_docs phoenix 1.5.9
Busque documentação para um pacote usando a versão do seu projeto:
mix hex.docs.mcp fetch_docs phoenix --project path/to/mix.exs
Configure caminhos de projeto para evitar especificá-los toda vez:
export HEXDOCS_MCP_MIX_PROJECT_PATHS="/path/to/project1/mix.exs,/path/to/project2/mix.exs"
mix hex.docs.mcp fetch_docs phoenix # Will use the first path from HEXDOCS_MCP_MIX_PROJECT_PATHS
Pesquise nos embeddings existentes:
mix hex.docs.mcp semantic_search phoenix --query "channels"
Verifique se existem embeddings para um pacote:
mix hex.docs.mcp check_embeddings phoenix
mix hex.docs.mcp check_embeddings phoenix 1.7.0
Agradecimentos
- hex2text - Pela ideia inicial e como referência
Desenvolvimento
Este projeto usa mise (anteriormente rtx) para gerenciar ferramentas de desenvolvimento e tarefas. O Mise fornece versões consistentes de ferramentas e automação de tarefas em todo o projeto.
Configurando o Ambiente de Desenvolvimento
-
Instale o mise (se ainda não o tiver):
# macOS with Homebrew brew install mise # Using the installer script curl https://mise.run | sh -
Clone o repositório e configure o ambiente de desenvolvimento:
git clone https://github.com/bradleygolden/hexdocs-mcp.git cd hexdocs-mcp mise install # Installs the right versions of Elixir and Node.js -
Configure as dependências:
mise build
Tarefas de Desenvolvimento
O Mise define várias tarefas de desenvolvimento úteis:
mise build- Compila os componentes Elixir e TypeScriptmise test- Executa todos os testesmise mcp_inspect- Inicia o inspetor MCP para testar o servidormise start_mcp_server- Inicia o servidor MCP (principalmente para depuração)
Sem Mise
Se você preferir não usar o mise, precisará de:
- Elixir 1.18.x
- Node.js 22.x
Então, você pode executar estes comandos diretamente:
# Instead of mise run setup_elixir
mix setup
# Instead of mise run setup_ts
npm install
# Instead of mise run build
mix compile --no-optional-deps --warnings-as-errors
npm run build
# Instead of mise run test
mix test
mix format --check-formatted
mix deps --check-unused
mix deps.unlock --all
mix deps.get
mix test
# Instead of mise run mcp_inspect
MCP_INSPECTOR=true npx @modelcontextprotocol/inspector node dist/index.js
Integração com Assistente de IA
Este projeto inclui instruções personalizadas para assistentes de IA para ajudar a otimizar seu fluxo de trabalho ao trabalhar com documentação Hex.
Exemplo de Instruções Personalizadas
Você pode encontrar exemplos de instruções personalizadas no repositório:
- Regras do Cursor - Regras personalizadas para o editor Cursor
- GitHub Copilot - Instruções personalizadas para o GitHub Copilot
Conteúdo Sugerido
When working with Elixir projects that use Hex packages:
## HexDocs MCP Workflow
1. Use `search` to find relevant documentation
2. Use `fetch` to fetch documentation for a package
Diretrizes de Lançamento
Ao preparar um novo lançamento, siga estas diretrizes para garantir consistência:
Gerenciamento de Versão
-
Conformidade com SemVer: Siga o Versionamento Semântico estritamente:
- MAJOR: mudanças incompatíveis na API
- MINOR: funcionalidade compatível com versões anteriores
- PATCH: correções de bugs compatíveis com versões anteriores
-
Sincronização de Versão:
- A versão do pacote Hex (em
mix.exs) e a versão do pacote npm (empackage.json) DEVEM ser idênticas - Atualize ambos os arquivos ao alterar a versão
- A versão do pacote Hex (em
Estilo de Código
- Formatação e Comentários:
- Siga as regras do formatador Elixir definidas em .formatter.exs
- Não adicione comentários ao código, a menos que estritamente necessário para contexto
- Código autodocumentado com nomes de funções claros é preferido
- Use documentação de módulo e função (@moduledoc e @doc) em vez de comentários inline
Gerenciamento de Changelog
-
Atualize o CHANGELOG.md:
- Documente todas as mudanças sob o título apropriado (Adicionado, Alterado, Corrigido, etc.)
- Inclua o número da nova versão e a data
- Mantenha uma seção [Não Lançado] para rastrear mudanças atuais
- Siga o formato Keep a Changelog
-
Formato de Entrada:
- Use tempo presente, estilo imperativo (por exemplo, "Adicionar recurso" não "Recurso adicionado")
- Inclua números de issue/PR quando aplicável
- Agrupe mudanças relacionadas
Processo de Lançamento
-
Antes do Lançamento:
- Execute
mix testpara garantir que todos os testes passem - Execute
mix formatpara garantir que o código esteja formatado corretamente - Verifique se o CHANGELOG.md está atualizado
- Execute
-
Commits de Lançamento:
- Crie um commit de incremento de versão que atualize:
- mix.exs
- package.json
- CHANGELOG.md (mova [Não Lançado] para a nova versão)
- Marque o commit com o número da versão (formato v0.1.0)
- Crie um commit de incremento de versão que atualize:
-
Após o Lançamento:
- Adicione uma nova seção [Não Lançado] ao CHANGELOG.md
- Atualize os links de versão no final do CHANGELOG.md
Estas diretrizes se aplicam tanto a contribuidores humanos quanto a assistentes de IA que trabalham neste projeto.
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request. Para mudanças importantes, abra uma issue primeiro para discutir o que você gostaria de alterar.
Este projeto é licenciado sob MIT - consulte o arquivo LICENSE para detalhes.