Bluesky MCP

Um servidor MCP remoto para a plataforma de mídia social Bluesky.

Documentação

Servidor Bluesky MCP

Um servidor Model Context Protocol (MCP) que fornece acesso abrangente ao Bluesky/AT Protocol para assistentes de IA. Construído em TypeScript, implantado na Vercel e totalmente compatível com o transporte MCP Streamable HTTP (versão do protocolo 2025-03-26).

Deploy with Vercel

Recursos

  • Operações de Postagem — Criar posts, obter posts, visualizar curtidas e reposts
  • Gerenciamento de Feed — Timeline, feeds personalizados, feeds de autores
  • Mecanismo de Busca — Buscar posts e usuários/atores
  • Acesso a Perfis — Visualizar perfis, contagem de seguidores, bios (individual e em lote)
  • Visualização de Threads — Explorar threads de posts e conversas
  • Favoritos — Criar, excluir e listar favoritos privados
  • Verificação de Idade — Iniciar fluxo, obter configuração e estado
  • Gerenciamento Seguro de Credenciais — Credenciais injetadas por requisição via cabeçalhos, nunca armazenadas
  • Streamable HTTP — Suporte completo ao transporte MCP (POST + GET + OPTIONS)
  • Autenticação Multi-cliente — Três métodos de credenciais para diferentes clientes MCP
  • Pronto para Vercel — Implantação serverless sem estado

Início Rápido

1. Implantar na Vercel

Clique no botão acima, ou clone e implante manualmente:

git clone https://github.com/Ravishka17/Bluesky-MCP.git
cd Bluesky-MCP
vercel

2. Criar uma Senha de Aplicativo do Bluesky

  1. Faça login no Bluesky
  2. Vá para Configurações → Senhas de Aplicativo
  3. Crie uma nova senha de aplicativo
  4. Anote seu handle (ex.: yourname.bsky.social) e a senha gerada

3. Conectar Seu Cliente de IA

Endpoint MCP: https://your-app.vercel.app/mcp


Autenticação

As credenciais nunca são armazenadas no servidor. Elas são enviadas por requisição via cabeçalhos HTTP e mantidas em memória apenas durante a duração dessa requisição.

Três métodos de credenciais são suportados, com a seguinte ordem de prioridade:

Método 1 — Dois Cabeçalhos Separados

Melhor para: HuggingChat, curl, qualquer cliente que suporte cabeçalhos personalizados.

CabeçalhoValor
X-BLUESKY-IDENTIFIERSeu handle ou e-mail
X-BLUESKY-PASSWORDSua senha de aplicativo
curl -X POST https://your-app.vercel.app/mcp \
  -H "Content-Type: application/json" \
  -H "X-BLUESKY-IDENTIFIER: yourname.bsky.social" \
  -H "X-BLUESKY-PASSWORD: your-app-password" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Método 2 — Cabeçalho Único Combinado

Melhor para: Mistral Vibe CLI, clientes com um único campo api_key_header.

Formato: handle:app-password (divide apenas no primeiro dois-pontos, então senhas contendo dois-pontos são seguras)

X-BLUESKY-CREDENTIALS: yourname.bsky.social:your-app-password

Método 3 — Authorization Bearer

Melhor para: MCP Playground, clientes compatíveis com OpenAI, qualquer ferramenta que use o cabeçalho Authorization.

Authorization: Bearer yourname.bsky.social:your-app-password

Configuração do Cliente

HuggingChat

No diálogo Adicionar Servidor MCP, expanda HTTP Headers e adicione:

Nome do cabeçalhoValor
X-BLUESKY-IDENTIFIERyourname.bsky.social
X-BLUESKY-PASSWORDyour-app-password

Claude Desktop

{
  "mcpServers": {
    "bluesky": {
      "type": "http",
      "url": "https://your-app.vercel.app/mcp",
      "headers": {
        "X-BLUESKY-IDENTIFIER": "yourname.bsky.social",
        "X-BLUESKY-PASSWORD": "your-app-password"
      }
    }
  }
}

Claude Code / CLI

claude mcp add bluesky --transport http https://your-app.vercel.app/mcp

Mistral Vibe (~/.vibe/config.toml)

[[mcp_servers]]
name = "bluesky"
transport = "streamable-http"
url = "https://your-app.vercel.app/mcp"
api_key_env = "BLUESKY_CREDENTIALS"
api_key_header = "X-BLUESKY-CREDENTIALS"
api_key_format = "{}"

Depois defina em ~/.vibe/.env:

BLUESKY_CREDENTIALS=yourname.bsky.social:your-app-password

Clientes baseados em YAML (config.yaml)

Para ferramentas como Hermes Agent (Nous Research) e outros clientes MCP configurados via YAML:

mcp_servers:
  bluesky:
    url: https://your-app.vercel.app/mcp
    headers:
      X-BLUESKY-CREDENTIALS: "${BLUESKY_CREDENTIALS}"

Defina no seu shell ou arquivo .env:

BLUESKY_CREDENTIALS=yourname.bsky.social:your-app-password

Exemplo do Hermes Agent (config.yaml):

mcp_servers:
  bluesky:
    url: https://your-app.vercel.app/mcp
    headers:
      X-BLUESKY-CREDENTIALS: "${BLUESKY_CREDENTIALS}"

MCP Playground

  • URL do Servidor Remoto: https://your-app.vercel.app/mcp
  • Cabeçalho de Autenticação: Bearer yourname.bsky.social:your-app-password

Cliente MCP Genérico

Configure o tipo de transporte streamable-http com a URL do endpoint e qualquer um dos três métodos de autenticação acima.


Ferramentas MCP

Operações de Postagem

FerramentaDescriçãoAutenticação Necessária
create_postCriar um novo post (máx. 300 caracteres, resposta/idioma opcionais)
get_postsBuscar posts específicos por URI (até 25)
get_likesObter usuários que curtiram um post
get_reposted_byObter usuários que repostaram um post
like_postCurtir um post
repost_postRepostar um post

Operações de Feed

FerramentaDescriçãoAutenticação Necessária
get_timelineObter timeline inicial (contas seguidas)
get_feedObter posts de um gerador de feed (URI at://)
get_author_feedObter posts de um usuário específico
get_threadObter thread de post com respostas e pais

Operações de Perfil

FerramentaDescriçãoAutenticação Necessária
get_profileObter perfil detalhado de um único usuário
get_profilesObter perfis de vários usuários (em lote, até 25)
get_suggestionsObter usuários sugeridos para seguir

Operações de Busca

FerramentaDescriçãoAutenticação Necessária
search_postsBuscar posts por palavra-chave, autor, idioma, menções
search_actorsBuscar usuários por nome ou handle
search_actors_typeaheadAutocompletar busca de usuários

Operações de Conta

FerramentaDescriçãoAutenticação Necessária
get_preferencesObter preferências da conta e filtros de conteúdo
update_emailAtualizar o endereço de e-mail associado à conta

Operações de Servidor / Gerenciamento de Conta

FerramentaDescriçãoAutenticação Necessária
admin_send_emailEnviar um e-mail como administrador do PDS
confirm_emailConfirmar um endereço de e-mail usando um token de verificação
create_accountCriar uma nova conta Bluesky/AT Protocol
create_app_passwordCriar uma nova senha de aplicativo para a conta
create_invite_codeCriar um único código de convite
create_invite_codesCriar vários códigos de convite de uma vez
create_sessionCriar uma sessão de autenticação (login)
deactivate_accountDesativar a conta autenticada
delete_accountExcluir permanentemente a conta autenticada
delete_sessionInvalidar a sessão atual
describe_serverObter informações do servidor PDS
get_account_invite_codesObter códigos de convite da conta
get_service_authObter um JWT assinado para autenticação de serviço
get_sessionObter detalhes da sessão atual
list_app_passwordsListar todas as senhas de aplicativo
refresh_sessionAtualizar tokens de sessão

Operações de Favoritos

FerramentaDescriçãoAutenticação Necessária
create_bookmarkSalvar um post como favorito privado
delete_bookmarkRemover um favorito por URI
get_bookmarksListar todos os favoritos privados

Operações de Verificação de Idade

FerramentaDescriçãoAutenticação Necessária
begin_age_assuranceIniciar o fluxo de verificação de idade
get_age_assurance_configObter configuração do provedor de verificação de idade
get_age_assurance_stateObter status atual da verificação de idade

Utilitário

FerramentaDescriçãoAutenticação Necessária
test_connectivityTestar conexão e verificar status de autenticação

Prompts MCP

PromptDescrição
bluesky_usage_guideGuia abrangente para tarefas do Bluesky
search_posts_templateModelo para buscar posts
compose_postModelo para compor posts

Verificar Implantação

# Health check
curl https://your-app.vercel.app/health

# Check available auth methods
curl https://your-app.vercel.app/mcp

# Test MCP initialize
curl -X POST https://your-app.vercel.app/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Segurança

  1. Credenciais nunca armazenadas — nem em variáveis de ambiente da Vercel, nem no git, nem em disco
  2. Injeção por requisição — as credenciais são passadas nos cabeçalhos e mantidas em memória apenas para aquela requisição
  3. Três métodos de autenticação — flexível para qualquer cliente sem comprometer a segurança
  4. Sanitização de entrada — todas as entradas são validadas e sanitizadas antes de atingir a API do Bluesky
  5. Limitação de taxa — limites em camadas para operações de leitura vs. escrita
  6. Cabeçalhos de segurança — X-Frame-Options, X-Content-Type-Options, etc.

Desenvolvimento

# Install dependencies
pnpm install

# Run in development mode
pnpm dev

# Build for production
pnpm build

Para desenvolvimento local, as credenciais podem ser passadas via cabeçalhos em cada requisição. Nenhuma variável de ambiente é necessária.


Arquitetura

Bluesky-MCP/
├── app/
│   ├── mcp/route.ts        # MCP endpoint — credential extraction + transport
│   ├── health/route.ts     # Health check
│   ├── layout.tsx
│   └── page.tsx
├── src/
│   ├── mcp-server.ts       # MCP server — tool routing, credential injection
│   ├── bluesky-client.ts   # Bluesky API client (all methods)
│   ├── handlers.ts         # Tool handlers
│   ├── toolDefinitions.ts  # Tool schemas
│   ├── sanitize.ts         # Input sanitization
│   ├── middleware.ts       # Rate limiting, security headers
│   ├── types.ts            # TypeScript types
│   └── utils.ts            # Utilities
├── vercel.json
└── package.json

Licença

Este projeto é liberado em domínio público sob The Unlicense.

Este é um software livre e sem restrições. Qualquer pessoa é livre para copiar, modificar, publicar, usar, compilar, vender ou distribuir este software, para qualquer finalidade, comercial ou não comercial, e por qualquer meio, sem quaisquer condições ou restrições.