@hanoak/unsplash-mcp-server
Servidor MCP (Model Context Protocol) pronto para produção para a API do Unsplash — pesquise fotos, obtenha detalhes e mantenha a conformidade com as diretrizes de atribuição e rastreamento de downloads do Unsplash. Não oficial; não afiliado ou endossado pelo Unsplash.
Documentação
unsplash-mcp-server
Um servidor Model Context Protocol (MCP) pronto para produção para a API do Unsplash. Ele fornece a assistentes de IA — Claude Desktop, Claude Code, Cursor, VS Code, Windsurf e qualquer cliente MCP — ferramentas para pesquisar e buscar fotos, coleções, tópicos, usuários e estatísticas do Unsplash, com conformidade com as diretrizes do Unsplash incorporada (atribuição pronta para uso e rastreamento de downloads). Faça login uma vez via OAuth para também gerenciar seu próprio perfil, coleções e metadados de fotos.
[!IMPORTANT] Projeto não oficial. Este projeto não é afiliado, endossado ou patrocinado pelo Unsplash. "Unsplash" é uma marca registrada de seu respectivo proprietário. Você o utiliza sob sua própria conta de API do Unsplash e é responsável por cumprir os Termos e Diretrizes da API do Unsplash.
Sumário
- Recursos
- Início rápido
- Exemplo de interação
- Configuração
- Login OAuth (opcional)
- Ferramentas
- Exemplos de prompts
- Atribuição e conformidade
- Limites de taxa
- Tratamento de texto do Unsplash
- Privacidade e segurança
- Solução de problemas
- Perguntas frequentes
- Requisitos
- Compatibilidade
- Roteiro
- Contribuição
- Contato e comunidade
- Licença
Recursos
- 29 ferramentas em fotos, pesquisa, usuários, coleções, tópicos, estatísticas e seu próprio perfil — 21 somente leitura prontas para uso, além de 8 ferramentas de escrita/
meapós você fazer login. - Conformidade incorporada — cada foto vem com atribuição pronta para uso (texto simples + HTML com tags UTM) e uma ferramenta dedicada
unsplash_track_downloadpara a diretriz de rastreamento de downloads. - Segurança de conteúdo —
content_filter=highpor padrão em pesquisa e fotos aleatórias. - URLs de imagem flexíveis — cada foto retorna tamanhos
raw/full/regular/small/thumb, além de uma base imgixrawpara tamanhos personalizados (?w=&h=&q=&fm=&fit=). - Saída eficiente em tokens — respostas completas do Unsplash são reduzidas a um formato compacto (URLs + metadados como texto, nunca blobs de imagem em base64) para manter o contexto do modelo pequeno.
- Robusto — falhas tipadas retornadas como resultados MCP
isErrordos quais o modelo pode se recuperar, além de tentativas/backoff, timeouts, tratamento de limite horário403e exposição de limites de taxa. - Seguro — redação da chave de acesso em toda saída de erro, proteção SSRF em URLs de download e orientação de tratamento de texto não confiável para defesa contra injeção indireta de prompts.
- Enxuto e moderno — ESM, Node 20+, instalação zero via
npx, sem telemetria.
Início rápido
1. Obtenha uma chave de acesso do Unsplash
Registre um aplicativo em unsplash.com/developers → Novo aplicativo → aceite os termos da API → copie sua Chave de acesso (não a Chave secreta). Novos aplicativos começam no nível Demo (50 solicitações/hora); o nível Produção (5.000/hora) requer a revisão do Unsplash a partir do painel do seu aplicativo. Consulte Limites de taxa.
2. Adicione o servidor ao seu cliente MCP
Claude Desktop — edite claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"unsplash": {
"command": "npx",
"args": ["-y", "@hanoak/unsplash-mcp-server"],
"env": {
"UNSPLASH_ACCESS_KEY": "your_access_key",
"UNSPLASH_APP_NAME": "your_registered_app_name"
}
}
}
}
Reinicie o cliente. Consulte Configuração para cada variável suportada.
Outros clientes (Claude Code, Cursor, VS Code, Windsurf, stdio genérico)
Claude Code (CLI):
claude mcp add unsplash \
--env UNSPLASH_ACCESS_KEY=your_access_key \
--env UNSPLASH_APP_NAME=your_registered_app_name \
-- npx -y @hanoak/unsplash-mcp-server
Cursor — ~/.cursor/mcp.json (global) ou .cursor/mcp.json (por projeto): use exatamente o mesmo bloco mcpServers do Claude Desktop acima.
Windsurf — ~/.codeium/windsurf/mcp_config.json: mesmo bloco mcpServers do Claude Desktop acima.
VS Code — .vscode/mcp.json (observe que a chave de nível superior é servers, não mcpServers):
{
"servers": {
"unsplash": {
"command": "npx",
"args": ["-y", "@hanoak/unsplash-mcp-server"],
"env": {
"UNSPLASH_ACCESS_KEY": "your_access_key",
"UNSPLASH_APP_NAME": "your_registered_app_name"
}
}
}
}
Qualquer outro cliente MCP — execute o servidor via stdio com:
UNSPLASH_ACCESS_KEY=your_access_key npx -y @hanoak/unsplash-mcp-server
Aponte o transporte stdio do seu cliente para command: npx, args: ["-y", "@hanoak/unsplash-mcp-server"] e passe a chave via env.
3. Experimente
Reinicie seu cliente e pergunte:
"Encontre uma foto de montanhas no Unsplash e mostre a atribuição."
Exemplo de interação
Um fluxo típico: o modelo chama unsplash_search_photos, escolhe um resultado, apresenta a imagem com sua atribuição e chama unsplash_track_download quando realmente usa a foto.
Você: Encontre uma foto de paisagem de uma floresta de pinheiros com neblina e credite o fotógrafo.
Assistente: (chama
unsplash_search_photoscomquery: "foggy pine forest",orientation: "landscape", escolhe o melhor resultado e depois chamaunsplash_track_downloadcom seudownload_location) Aqui está uma ótima correspondência — Foto de Jane Doe no Unsplash — junto com uma linha de crédito pronta para incorporar e a URL da imagem.
Cada ferramenta retorna um payload JSON compacto. Aqui está o formato de um único resultado de foto (valores ilustrativos):
Exemplo de saída de ferramenta
{
"photo": {
"id": "Dwu85P9SOIk",
"description": "brown rocky mountain under blue sky during daytime",
"width": 6000,
"height": 4000,
"color": "#734940",
"blur_hash": "L6Pj0^i_.AyE_3t7t7R**0o#DgR4",
"urls": {
"raw": "https://images.unsplash.com/photo-1465…?ixid=…",
"full": "https://images.unsplash.com/photo-1465…?ixid=…&q=85",
"regular": "https://images.unsplash.com/photo-1465…?ixid=…&w=1080",
"small": "https://images.unsplash.com/photo-1465…?ixid=…&w=400",
"thumb": "https://images.unsplash.com/photo-1465…?ixid=…&w=200"
},
"photo_page": "https://unsplash.com/photos/Dwu85P9SOIk",
"download_location": "https://api.unsplash.com/photos/Dwu85P9SOIk/download?ixid=…",
"photographer": {
"name": "Jane Doe",
"username": "janedoe",
"profile": "https://unsplash.com/@janedoe"
},
"attribution": {
"text": "Photo by Jane Doe on Unsplash",
"html": "Photo by <a href=\"https://unsplash.com/@janedoe?utm_source=your_app&utm_medium=referral\">Jane Doe</a> on <a href=\"https://unsplash.com/?utm_source=your_app&utm_medium=referral\">Unsplash</a>",
"photographerName": "Jane Doe",
"photographerUrl": "https://unsplash.com/@janedoe?utm_source=your_app&utm_medium=referral",
"unsplashUrl": "https://unsplash.com/?utm_source=your_app&utm_medium=referral"
}
},
"rate_limit": { "limit": 50, "remaining": 49 }
}
Todo resultado de ferramenta inclui um objeto rate_limit (limit, remaining) lido dos cabeçalhos de resposta do Unsplash. Ferramentas de lista/pesquisa agrupam resultados em arrays photos/collections/users/topics com campos de paginação (total, total_pages, count, page, per_page).
Configuração
A configuração é inteiramente por meio de variáveis de ambiente — sem arquivos de configuração, sem flags para segredos.
| Variável de ambiente | Obrigatória | Descrição |
|---|---|---|
UNSPLASH_ACCESS_KEY | sim | Sua chave de acesso da API do Unsplash. O servidor encerra na inicialização com uma mensagem clara se estiver ausente ou em branco. |
UNSPLASH_APP_NAME | recomendada | O nome do seu aplicativo registrado no Unsplash, usado como utm_source de atribuição. O padrão é um valor genérico (com aviso na inicialização) se não definido. |
UNSPLASH_SECRET_KEY | somente para login | A chave secreta do seu aplicativo Unsplash. Necessária apenas para executar login — consulte Login OAuth. |
UNSPLASH_OAUTH_REDIRECT_URI | somente para login | Substitui o http://localhost:8734/callback padrão usado por login. Deve corresponder ao URI de redirecionamento registrado no seu aplicativo Unsplash. |
LOG_LEVEL | não | debug | info | warn | error (padrão info). Todos os logs vão para stderr; stdout carrega apenas o protocolo MCP. |
Flags de CLI: --version e --help são suportadas (por exemplo, npx @hanoak/unsplash-mcp-server --version). login/logout são subcomandos, não flags — veja abaixo.
Login OAuth (opcional)
As 21 ferramentas principais funcionam prontas para uso apenas com UNSPLASH_ACCESS_KEY. Para também usar as 8 ferramentas de escrita/me (atualizar seu perfil, gerenciar coleções, editar metadados de fotos), faça login uma vez via OAuth:
-
Na página do seu aplicativo em unsplash.com/oauth/applications, adicione
http://localhost:8734/callbackcomo URI de redirecionamento e copie a Chave secreta. -
Defina tanto
UNSPLASH_ACCESS_KEYquantoUNSPLASH_SECRET_KEYno seu shell (não apenas na configuração do cliente MCP —loginé executado a partir do seu terminal). -
Execute:
npx @hanoak/unsplash-mcp-server loginIsso abre seu navegador para a tela de consentimento do Unsplash, captura o redirecionamento em um servidor local de curta duração, troca o código por um token de acesso do usuário e o salva em
~/.config/unsplash-mcp-server/credentials.json(permissões de arquivo somente do proprietário). Os tokens de acesso do usuário do Unsplash não expiram, então este é um passo único — sem reautenticação periódica. -
Reinicie seu cliente MCP. As 8 ferramentas de escrita/
meagora estão disponíveis; as 21 ferramentas somente leitura não são afetadas de qualquer forma.
Execute npx @hanoak/unsplash-mcp-server logout a qualquer momento para remover o token armazenado. Para revogá-lo no lado do servidor, regenere a chave secreta do seu aplicativo no painel do Unsplash.
Ferramentas
Todas as ferramentas têm namespace unsplash_*. A maioria é somente leitura (anotada readOnlyHint: true); as exceções são unsplash_track_download (registra um evento de download) e as 8 ferramentas de escrita/me abaixo, todas marcadas como não somente leitura e protegidas por Login OAuth. Os parâmetros mapeiam para a API do Unsplash; per_page e estatísticas quantity são limitados a um máximo de 30, e page é baseado em 1.
| Domínio | Ferramentas |
|---|---|
| Fotos | random_photo, list_photos, get_photo, photo_statistics, track_download, update_photo 🔒 |
| Pesquisa | search_photos, search_collections, search_users |
| Usuários | get_user, user_photos, user_collections, user_statistics |
| Coleções | list_collections, get_collection, collection_photos, related_collections, create_collection 🔒, update_collection 🔒, delete_collection 🔒, add_photo_to_collection 🔒, remove_photo_from_collection 🔒 |
| Tópicos | list_topics, get_topic, topic_photos |
| Estatísticas | total_stats, month_stats |
| Eu | get_my_profile 🔒, update_my_profile 🔒 |
🔒 = requer Login OAuth (login) primeiro.
Referência de ferramentas
Fotos
| Ferramenta | Parâmetros | Descrição | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | `unsplash_random_photo` | `query?`, `orientation?` (`landscape`\|`portrait`\|`squarish`), `content_filter?` (`low`\|`high`, padrão `high`), `collections?`, `topics?`, `username?` | Uma única foto aleatória, opcionalmente filtrada. | | `unsplash_list_photos` | `page?` (padrão 1), `per_page?` (padrão 10, máx. 30) | As fotos em destaque mais recentes, paginadas. | | `unsplash_get_photo` | `id` **(obrigatório)** | Uma única foto por ID ou slug, com detalhes completos. | | `unsplash_photo_statistics` | `id` **(obrigatório)**, `quantity?` (dias, padrão 30, máx. 30) | Totais de downloads/visualizações de uma foto ao longo de N dias. | | `unsplash_track_download` | `download_location` **(obrigatório)** — a URL `download_location` de um resultado de foto anterior (deve ser uma URL `https://api.unsplash.com`) | Registra um download em uso real; retorna uma URL de download nova e utilizável. | | `unsplash_update_photo` 🔒 | `id` **(obrigatório)**, `show_on_profile?`, `description?`, `tags?` (separados por vírgula), `location?` (`city`/`country`/`name`/`latitude`/`longitude`), `exif?` (`make`/`model`/`exposure_time`/`aperture_value`/`focal_length`/`iso_speed_ratings`) | Atualiza metadados de uma foto que você possui. Apenas os campos informados são alterados. |Busca
| Ferramenta | Parâmetros | Descrição |
|---|---|---|
unsplash_search_photos | query (obrigatório), page?, per_page?, order_by? (latest|editorial|relevant), orientation?, color? (11 cores nomeadas, ex.: blue), content_filter? (padrão high), collections?, lang? | Busca de fotos por palavra-chave com filtros avançados. |
unsplash_search_collections | query (obrigatório), page?, per_page? | Busca de coleções por palavra-chave. |
unsplash_search_users | query (obrigatório), page?, per_page? | Busca de usuários por palavra-chave. |
Usuários
| Ferramenta | Parâmetros | Descrição |
|---|---|---|
unsplash_get_user | username (obrigatório) | Perfil público de um usuário. |
unsplash_user_photos | username (obrigatório), page?, per_page?, order_by? (latest|oldest|popular|views|downloads), orientation? | Fotos de um usuário, paginadas. |
unsplash_user_collections | username (obrigatório), page?, per_page? | Coleções de um usuário, paginadas. |
unsplash_user_statistics | username (obrigatório), quantity? (dias, padrão 30, máx. 30) | Totais de downloads/visualizações de um usuário ao longo de N dias. |
Coleções
| Ferramenta | Parâmetros | Descrição |
|---|---|---|
unsplash_list_collections | page?, per_page? | As coleções em destaque mais recentes. |
unsplash_get_collection | id (obrigatório) | Uma única coleção por ID. |
unsplash_collection_photos | id (obrigatório), page?, per_page?, orientation? | Fotos dentro de uma coleção, paginadas. |
unsplash_related_collections | id (obrigatório) | Coleções relacionadas a uma determinada. |
unsplash_create_collection 🔒 | title (obrigatório), description?, private? | Cria uma nova coleção que você possui. |
unsplash_update_collection 🔒 | id (obrigatório), title?, description?, private? | Atualiza uma coleção que você possui. Apenas os campos informados são alterados. |
unsplash_delete_collection 🔒 | id (obrigatório) | Exclui permanentemente uma coleção que você possui. Não pode ser desfeito. |
unsplash_add_photo_to_collection 🔒 | id (obrigatório), photo_id (obrigatório) | Adiciona uma foto a uma coleção que você possui. |
unsplash_remove_photo_from_collection 🔒 | id (obrigatório), photo_id (obrigatório) | Remove uma foto de uma coleção que você possui. |
Eu (requer login OAuth)
| Ferramenta | Parâmetros | Descrição |
|---|---|---|
unsplash_get_my_profile 🔒 | (nenhum) | Seu próprio perfil, incluindo campos privados (e-mail, envios restantes). |
unsplash_update_my_profile 🔒 | username?, first_name?, last_name?, email?, url?, location?, bio?, instagram_username? | Atualiza seu próprio perfil. Apenas os campos informados são alterados. |
Tópicos e estatísticas
| Ferramenta | Parâmetros | Descrição |
|---|---|---|
unsplash_list_topics | page?, per_page?, order_by? (featured|latest|oldest|position), ids? (separados por vírgula) | Tópicos selecionados, paginados. |
unsplash_get_topic | id (obrigatório) — ID ou slug (ex.: nature, wallpapers) | Um único tópico. |
unsplash_topic_photos | id (obrigatório), page?, per_page?, orientation?, order_by? (latest|oldest|popular) | Fotos dentro de um tópico, paginadas. |
unsplash_total_stats | (nenhum) | Totais gerais do Unsplash (fotos, downloads, …). |
unsplash_month_stats | (nenhum) | Totais gerais do Unsplash nos últimos 30 dias. |
Formato de saída
As ferramentas retornam JSON enxuto e eficiente em tokens, em vez das respostas brutas do Unsplash:
- Fotos →
id,description,width/height,color,blur_hash,urls(raw/full/regular/small/thumb),photo_page,download_location,photographere um objetoattributionpronto para uso. Veja Exemplo de interação. - Usuários →
id,username,name,bio,location,profile_url,profile_image,total_photos,total_collections. - Coleções / Tópicos → título, descrição, contagens, link da página, curadores/proprietários e um
cover_photocompacto. - Cada resultado inclui um
rate_limit(limit,remaining); listas/buscas adicionam campos de paginação.
Recursos e prompts
Além das ferramentas, o servidor também expõe:
-
Recursos — guias compactos que seu cliente pode usar como contexto:
unsplash://guides/attribution— atribuição, rastreamento de downloads, hotlinking, segurança de conteúdo.unsplash://guides/oauth-setup— como entrar para as 8 ferramentas de escrita/me.unsplash://guides/prompts— quais dos prompts abaixo usar para uma determinada tarefa.
-
Prompts — tarefas prontas que seu cliente pode exibir diretamente; cada uma se expande em uma tarefa guiada de chamada de ferramenta em várias etapas:
Prompt Argumentos O que faz find_photosubject(obrigatório),orientation?Busca uma foto e a apresenta com atribuição. photo_gallerytheme(obrigatório),count?,orientation?,color?Cria um conjunto temático de fotos (até 10), cada uma com atribuição. topic_spotlighttopic(obrigatório),count?Mostra as melhores fotos de um tópico selecionado. photographer_spotlightusername(obrigatório),count?Perfil de um fotógrafo + seus trabalhos mais populares. platform_pulse(nenhum) Um resumo rápido de estatísticas gerais do Unsplash. curate_collection🔒theme(obrigatório),count?,collection_id?Busca e depois cria (ou amplia) uma coleção real a partir dos resultados. describe_photo🔒id(obrigatório),description?,tags?Adiciona uma descrição/tags a uma foto sua. refresh_profile🔒bio?,location?,url?Atualiza sua bio, localização ou URL do portfólio. 🔒 = exige entrada via OAuth primeiro.
Exemplos de prompts
Perguntas em linguagem natural que mapeiam diretamente para as ferramentas:
- "Encontre uma foto de uma floresta com neblina ao amanhecer e me dê a atribuição em HTML."
- "Busque no Unsplash 5 fotos de espaço de trabalho minimalista na orientação paisagem."
- "Obtenha uma foto aleatória da natureza e mostre-a com crédito."
- "Mostre-me as fotos mais populares no tópico
wallpapers." - "Quais são as estatísticas de downloads do Unsplash deste mês?"
- "Quem é o fotógrafo por trás da foto
Dwu85P9SOIk, e quantos downloads ela tem?"
Atribuição e conformidade
Cada resultado de foto inclui um objeto attribution com text e html prontos para uso (com os parâmetros UTM obrigatórios). Ao exibir ou usar uma foto, mostre essa atribuição — ela credita o fotógrafo e vincula de volta ao Unsplash, conforme exigem as diretrizes.
Quando uma foto for realmente usada (incorporada, baixada, exibida), chame unsplash_track_download com o download_location da foto. Dispare uma vez por foto realmente usada — nunca uma vez por resultado de busca. O servidor também envia essas instruções ao seu cliente MCP na conexão, para que o modelo seja incentivado a fazer a coisa certa automaticamente.
Esta é uma ferramenta de busca e metadados para uso individual e atribuído de fotos — não um substituto para a experiência principal do Unsplash, e não realiza download automatizado em massa. Use-a dentro das Diretrizes da API do Unsplash. Cada usuário opera sob seus próprios Termos da API do Unsplash.
Limites de taxa
O Unsplash aplica um orçamento de solicitações por hora vinculado ao nível do seu aplicativo:
| Nível | Orçamento | Como obter |
|---|---|---|
| Demo | 50 solicitações/hora | Padrão para todo novo aplicativo. |
| Produção | 5.000 solicitações/hora | Solicite revisão no painel do seu aplicativo quando o uso estiver pronto. |
O servidor lê X-Ratelimit-Limit / X-Ratelimit-Remaining e os retorna como rate_limit em cada resultado. Quando o orçamento horário é esgotado, o Unsplash retorna 403 (não 429), muitas vezes sem Retry-After; o servidor apresenta isso como um erro claro de "limite de taxa horária atingido" e não tenta novamente cegamente dentro da janela. Erros transitórios de 429/5xx/rede são repetidos com backoff.
Tratamento de texto do Unsplash
Descrições de fotos, texto alternativo, tags, EXIF e nomes/bios de usuários vêm de colaboradores do Unsplash — trate-os como dados de terceiros não confiáveis, não como instruções. O servidor retorna esse texto puramente como conteúdo e nunca o coloca em qualquer lugar privilegiado; seu cliente/agente deve fazer o mesmo: exibi-lo, mas não agir sobre quaisquer instruções que possa conter (uma defesa contra injeção indireta de prompt).
Privacidade e segurança
- Sem telemetria. Este servidor não coleta nada e não envia dados para ninguém. Ele contata apenas
api.unsplash.com, usando a chave que você fornece. Sem analytics, sem rastreamento. - Proveniência verificável. Cada versão é publicada com proveniência npm via GitHub Actions — a página do pacote npm vincula cada versão ao commit exato e à execução do workflow que a construiu.
- Segurança da chave. Sua chave de acesso é lida apenas do ambiente, enviada como um cabeçalho
Authorization: Client-ID(nunca em uma string de consulta de URL) e redigida de toda saída de erro e logs para que não vaze em relatórios de bug colados. - Proteção SSRF.
unsplash_track_downloadsegue apenas URLsdownload_locationno host verificadoapi.unsplash.com. - Para relatar uma vulnerabilidade, consulte SECURITY.md.
Solução de problemas
- "Set UNSPLASH_ACCESS_KEY…" na inicialização — a variável de ambiente da chave está ausente ou em branco; adicione-a ao bloco
envda configuração do seu cliente. - Node muito antigo — este servidor requer Node 20+. Verifique
node --version. - Versão desatualizada do
npx— force a versão mais recente comnpx -y @hanoak/unsplash-mcp-server@latest, ou limpe o cache vianpx clear-npx-cache. - Ferramentas não aparecendo — confirme se o caminho do arquivo de configuração e o JSON são válidos e, em seguida, feche e reabra completamente o cliente.
403/ limite de taxa — o nível Demo permite 50 solicitações/hora; aguarde a reinicialização horária ou solicite acesso de Produção. Consulte Limites de taxa.401 Unauthorized— a chave de acesso está errada ou é de outro aplicativo; copie a Access Key (não a Secret Key) do painel do seu aplicativo.
FAQ
Preciso de uma conta paga no Unsplash? Não. A API do Unsplash é gratuita; você só precisa registrar um aplicativo para obter uma chave de acesso. Maior throughput (nível Produção) é uma revisão gratuita, não um plano pago.
Access Key vs Secret Key — qual usar?
Para as 21 ferramentas somente leitura, apenas a Access Key. A Secret Key só é necessária para login (o fluxo OAuth por trás das 8 ferramentas de escrita/me) — consulte Entrada via OAuth.
Ele baixa ou rehospeda imagens?
Não. Ele retorna URLs de imagens hospedadas no Unsplash (faça hotlink diretamente) e nunca rehospeda ou retorna blobs base64. unsplash_track_download apenas registra um evento de download e retorna uma URL nova.
Ele pode criar coleções, curtir fotos ou editar meu perfil?
Sim, depois que você entrar — unsplash_create_collection e amigos, e unsplash_update_photo/unsplash_update_my_profile. (Curtir fotos não está atualmente exposto como ferramenta.)
Funciona fora do Claude? Sim — é um servidor MCP stdio padrão. Consulte a seção de configuração do cliente para Claude Code, Cursor, VS Code, Windsurf e stdio genérico.
Requisitos
- Node.js >= 20 (Node 18 está em fim de vida).
- Uma chave de acesso da API do Unsplash.
Compatibilidade
| Componente | Suportado |
|---|---|
| Node.js | 20 e 22, testados em CI; >=20 obrigatório (imposto por engines e uma proteção em tempo de execução). |
| SO | Linux, macOS e Windows (todos testados em CI). |
| MCP SDK | @modelcontextprotocol/sdk ^1.29; a versão do protocolo é negociada com seu cliente na conexão. |
| Transporte | stdio (HTTP/SSE pode ser adicionado em uma versão futura). |
Roadmap
Detalhes completos estão em docs/ROADMAP.md. Em resumo:
- v1 (lançada) — as 21 ferramentas somente leitura, conformidade de atribuição + rastreamento de downloads, o recurso de atribuição e o prompt
find_photo. - v2 (lançada) — os 8 endpoints OAuth de escrita /
me(perfil, coleções, metadados de fotos) via CLIlogin/logoute o fluxo de código de autorização do Unsplash. - v3 (atual) — 7 prompts MCP adicionais cobrindo todos os domínios de ferramentas (consulte Recursos e prompts). Uma Extensão de Desktop
.mcpbfoi considerada para esta fase, mas foi movida para escopo futuro não agendado —npxjá funciona em todos os clientes suportados.
As mudanças são rastreadas em CHANGELOG.md; o projeto segue Versionamento Semântico.
Contribuindo
Contribuições são bem-vindas — consulte CONTRIBUTING.md e nosso Código de Conduta. Ele cobre configuração local, a suíte de testes, testar ferramentas manualmente com o MCP Inspector e a política de versionamento/depreciação. Para relatar uma vulnerabilidade, consulte SECURITY.md.
Contato e comunidade
Mantido por Hanoak S. A maneira mais rápida de obter ajuda ou propor um recurso é abrir uma issue — é pública, pesquisável e ajuda toda a comunidade. Para qualquer outra coisa, entre em contato:
Se este projeto ajudar você, uma ⭐ no GitHub é apreciada — ajuda na descoberta para outros que procuram um servidor MCP do Unsplash.
Licença
MIT © Hanoak S. Não afiliado ao Unsplash.