local-pinboard-mcp

Um servidor MCP local e seguro para conectar seu assistente de IA aos seus favoritos do Pinboard

Documentação

Servidor MCP Local Pinboard

Um servidor Model Context Protocol hospedado localmente que conecta sua conta Pinboard a qualquer assistente de IA compatível com MCP (como Claude Desktop, Cursor ou ferramentas similares).

Esta integração usa a API do Pinboard (v1) com esquemas TypeScript/Zod estritamente tipados para permitir que seu assistente de IA gerencie seus favoritos, tags e notas — sem expor credenciais externamente ou depender de serviços de terceiros.

Você pode usar o arquivo MCPB empacotado para começar rapidamente, ou clonar o repositório para construir o seu próprio. O código-fonte é aberto, local e auditável.

Recursos

Uma vez conectado, seu assistente de IA pode usar as seguintes ferramentas:

get_recent_posts

Liste seus favoritos Pinboard mais recentes, opcionalmente filtrados por até três tags.

ParâmetroTipoDescrição
tagstring[]?Filtrar por até 3 tags
countnumber?Número de resultados a retornar (padrão 15, máximo 100)

get_posts

Recupere favoritos que correspondam a uma tag, uma data específica ou uma URL específica.

ParâmetroTipoDescrição
tagstring[]?Filtrar por até 3 tags
dtstring?Retornar posts adicionados nesta data (AAAA-MM-DD)
urlstring?Retornar o post para esta URL exata
metaboolean?Incluir hash de metadados de detecção de alterações

get_all_posts

Recupere todos os favoritos da sua conta Pinboard. Limitado a uma vez a cada 5 minutos.

ParâmetroTipoDescrição
tagstring[]?Filtrar por até 3 tags
startnumber?Deslocamento para paginação
resultsnumber?Número máximo de posts a retornar
fromdtstring?Retornar apenas posts criados após esta data/hora (UTC)
todtstring?Retornar apenas posts criados antes desta data/hora (UTC)

add_post

Adicionar ou substituir um favorito. URL e título são obrigatórios. Por padrão, substitui qualquer favorito existente para a mesma URL.

ParâmetroTipoDescrição
urlstringA URL a favoritar (obrigatório)
titlestringTítulo do favorito (obrigatório)
descriptionstring?Notas estendidas ou descrição
tagsstring[]?Tags a aplicar. Tags que começam com . são privadas
sharedboolean?Defina como false para tornar o favorito privado
toreadboolean?Defina como true para marcar como não lido/para ler
replaceboolean?Defina como false para pular se o favorito já existir
dtstring?Carimbo de data/hora de criação em formato UTC ISO 8601

delete_post

Excluir permanentemente um favorito pela sua URL. Esta ação não pode ser desfeita.

ParâmetroTipoDescrição
urlstringA URL do favorito a excluir permanentemente

suggest_tags

Retornar tags populares (em todo o site) e recomendadas (do seu histórico) para uma determinada URL.

ParâmetroTipoDescrição
urlstringA URL para obter sugestões de tags

get_tags

Obtenha todas as suas tags do Pinboard com suas contagens de uso. Sem parâmetros.

rename_tag

Renomeie uma tag em todos os favoritos, ou mescle-a em uma tag existente.

ParâmetroTipoDescrição
old_namestringO nome da tag atual
new_namestringO novo nome da tag

delete_tag

Exclua uma única tag da sua conta. Remove a tag de todos os favoritos, mas não os exclui.

ParâmetroTipoDescrição
tagstringO nome da tag a excluir

list_notes

Liste todas as suas notas (sem o corpo do texto). Sem parâmetros. A criação/edição de notas não é suportada na API v1.

get_note

Busque uma nota específica incluindo seu corpo de texto completo.

ParâmetroTipoDescrição
idstringO ID hexadecimal da nota

get_last_update

Retorna o horário da alteração mais recente de favoritos. Use isso para verificar se os dados mudaram desde sua última busca. Sem parâmetros.


Abordagem de Segurança

Este servidor usa transporte stdio exclusivamente — ele nunca expõe uma porta HTTP externa. A comunicação é estritamente entre sua máquina local e os endpoints oficiais do api.pinboard.in.

Seu token de API é passado ao Pinboard via parâmetro de consulta auth_token conforme exigido pela API v1. Para garantir privacidade absoluta, o servidor é projetado para interceptar e sanitizar mensagens de erro em nível de rede para evitar que seu token vaze acidentalmente nos logs locais do Claude Desktop ou Cursor em caso de falha de rede.

Respostas de erro são truncadas com segurança, e caminhos de entrada como tags e IDs hexadecimais são estritamente verificados via regex do Zod antes que as requisições sejam feitas.


Instalação e Configuração

0. Baixe o arquivo MCPB mais recente

Baixar dos lançamentos do GitHub

Arraste o arquivo .mcpb da sua pasta de downloads para a área de trabalho ou navegador de arquivos do seu assistente de IA. O assistente deve reconhecê-lo como um servidor MCP e solicitar que você o carregue.

Ou...

1. Requisitos

Certifique-se de ter instalado Node.js (versão 22+ recomendada) e npm na sua máquina local.

2. Obtenha seu Token de API do Pinboard

  1. Entre na sua conta Pinboard.
  2. Vá para Configurações → Senha.
  3. Seu token de API é exibido nessa página no formato username:HEXTOKEN.
  4. Copie-o com segurança.

3. Configuração Local do Projeto

Clone o repositório e instale as dependências necessárias:

npm install

Copie o arquivo de exemplo de variáveis de ambiente:

cp .env.example .env

Abra .env no seu editor de texto e cole seu token de API:

PINBOARD_API_TOKEN=username:YOURHEXTOKEN

4. Compile o Projeto

Compile TypeScript para JavaScript:

npm run build

Conectando a um Cliente MCP

Este servidor funciona com qualquer cliente compatível com MCP. Abaixo está um exemplo usando Claude Desktop.

Claude Desktop

  1. Abra o Claude Desktop e escolha Configurações → Desenvolvedor → Editar Config para abrir claude_desktop_config.json.

  2. Adicione isso à seção mcpServers, corrigindo o caminho para o arquivo index.js compilado e adicionando seu próprio token de API:

{
  "mcpServers": {
    "local-pinboard": {
      "command": "node",
      "args": ["/absolute/path/to/your/local-pinboard-mcp/dist/index.js"],
      "env": {
        "PINBOARD_API_TOKEN": "username:YOURHEXTOKEN"
      }
    }
  }
}
  1. Reinicie o Claude Desktop. As novas ferramentas aparecerão instantaneamente e você pode começar a perguntar coisas como "Mostre-me meus favoritos não lidos recentes" ou "Pesquise meus favoritos por tutoriais de React".

Para outros clientes MCP, consulte a documentação deles sobre como registrar um servidor stdio local apontando para dist/index.js com as variáveis de ambiente necessárias.


Desenvolvimento e Testes

Este projeto é construído usando TypeScript, @modelcontextprotocol/sdk e análise Zod.

Se você estiver desenvolvendo novas ferramentas ou fazendo ajustes:

  1. Compile: Sempre execute npm run build após fazer modificações.
  2. Testes: Execute a suíte de testes Vitest:
npm test

Pull requests são bem-vindos! Por favor, abra uma issue primeiro para discutir o que você gostaria de alterar.