nan-mcp-server

nan-mcp-server

MCP server exposing NaN API media tools (image generation/editing, text-to-speech, speech-to-text, embeddings, reranking) for any MCP-compatible client.

Category
访问服务器

README

NaN MCP Server

npm Descargas Node CI License MCP

Servidor MCP (Model Context Protocol) que expone las herramientas de media de la API de NaN (api.nan.builders) para cualquier cliente compatible con MCP.

Al ser un estándar abierto, funciona con opencode, Claude Code, Codex, Pi, Cursor, Windsurf, Zed, etc.

Herramientas

Herramienta Descripción Modelo
generate_image Generar imagen desde texto flux-2-klein
edit_image Editar imagen (imagen→imagen) flux-2-klein
text_to_speech Sintetizar audio desde texto kokoro
list_voices Listar voces kokoro por idioma —
speech_to_text Transcribir audio a texto whisper
embed Embeddings vectoriales (4096 dims) qwen3-embedding
rerank Reordenar documentos por relevancia (RAG) rerank
list_models Listar modelos disponibles con tu key —

Requisitos

  • Node.js >= 18
  • Una API key de NaN (sk-...)

Instalación

El paquete se distribuye por npm. La forma más simple de usarlo en cualquier cliente MCP es sin instalarlo: npx lo ejecuta al vuelo.

export NAN_API_KEY="sk-tu-key-aqui"
npx -y nan-mcp-server@1.0.6

Con otro gestor de paquetes, si ya lo usas:

pnpm dlx nan-mcp-server@1.0.6    # pnpm
yarn dlx nan-mcp-server@1.0.6    # yarn
bunx nan-mcp-server@1.0.6        # bun

O instálalo globalmente:

npm install -g nan-mcp-server@1.0.6   # o: pnpm add -g / bun add -g
nan-mcp-server

Sobre la versión fijada: los ejemplos fijan una versión exacta en lugar de @latest, a propósito. Con @latest, cada arranque descarga la última versión publicada, así que cualquier versión futura —incluida una publicada por una cuenta comprometida— se ejecutaría en tu máquina automáticamente. Fijar la versión te deja decidir cuándo actualizar; consulta las releases y sube el número cuando quieras. Si prefieres actualizaciones automáticas, sustituye la versión por @latest en cualquiera de los ejemplos.

Configuración

El servidor se ejecuta vía stdio (proceso local). Solo necesita una variable de entorno: NAN_API_KEY.

Las imágenes y audios generados se guardan en ~/nan-mcp-output/ (configurable con NAN_OUTPUT_DIR).

Configuración por cliente

<details> <summary>opencode</summary>

Añade a tu opencode.jsonc (o créalo en ~/.config/opencode/):

{
  "mcp": {
    "nan-media": {
      "type": "local",
      "command": ["npx", "-y", "nan-mcp-server@1.0.6"],
      "environment": {
        "NAN_API_KEY": "{env:NAN_API_KEY}"
      }
    }
  }
}

</details>

<details> <summary>Claude Code</summary>

Instalar vía CLI:

claude mcp add nan-media --scope user -e NAN_API_KEY='${NAN_API_KEY}' -- \
  npx -y nan-mcp-server@1.0.6

O en .mcp.json:

{
  "mcpServers": {
    "nan-media": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "nan-mcp-server@1.0.6"],
      "env": {
        "NAN_API_KEY": "${NAN_API_KEY}"
      }
    }
  }
}

</details>

<details> <summary>Codex</summary>

En ~/.codex/config.toml:

[mcp_servers.nan]
url = "https://api.nan.builders/mcp"
bearer_token_env_var = "NAN_API_KEY"

[mcp_servers.nan-media]
command = "npx"
args = ["-y", "nan-mcp-server@1.0.6"]

Seguridad: codex lee NAN_API_KEY de una variable de entorno — el servidor remoto vía bearer_token_env_var y el servidor local la hereda del shell. Así config.toml se puede subir a GitHub sin exponer secretos.

</details>

<details> <summary>Pi</summary>

Pi usa pi-mcp-adapter y lee los archivos MCP estándar. Instala el adaptador:

pi install npm:pi-mcp-adapter

Crea ~/.config/mcp/mcp.json (config compartido MCP estándar):

{
  "mcpServers": {
    "nan": {
      "url": "https://api.nan.builders/mcp",
      "auth": "bearer",
      "bearerTokenEnv": "NAN_API_KEY"
    },
    "nan-media": {
      "command": "npx",
      "args": ["-y", "nan-mcp-server@1.0.6"],
      "env": {
        "NAN_API_KEY": "$env:NAN_API_KEY"
      }
    }
  }
}

El servidor nan (remoto) usa auth: "bearer" con bearerTokenEnv; nan-media (local) interpola la key con $env:NAN_API_KEY. Ningún secreto queda en el archivo.

Para usar los modelos de NaN en Pi, define el proveedor en ~/.pi/agent/models.json:

{
  "providers": {
    "nan": {
      "baseUrl": "https://api.nan.builders/v1",
      "api": "openai-completions",
      "apiKey": "$NAN_API_KEY",
      "models": [
        { "id": "deepseek-v4-flash", "name": "DeepSeek V4 Flash", "reasoning": true, "input": ["text"], "contextWindow": 1048576 },
        { "id": "qwen3.6", "name": "Qwen 3.6", "reasoning": true, "input": ["text", "image"], "contextWindow": 262144 }
      ]
    }
  }
}

Luego usa --provider nan --model <id> (p.ej. pi --provider nan --model deepseek-v4-flash).

</details>

<details> <summary>Cursor / Windsurf / Zed</summary>

En la configuración de MCP del cliente, añade un servidor stdio:

Comando: npx -y nan-mcp-server@1.0.6
Variables: NAN_API_KEY=tu-clave-de-nan-builders (no la incluyas en el config versionado)

</details>

Uso

Una vez conectado, pide al agente:

  • "Genera una imagen de un faro al atardecer con nan-media"
  • "Sintetiza en español: Hola mundo, voz ef_dora"
  • "Transcribe el audio /ruta/audio.mp3"
  • "Reordena estos documentos según la query X"

Límites de la API

Recurso Límite
Generación/edición de imágenes 100 req/mes por usuario, 1 req/s (burst 3)
Tamaño máximo archivo (STT / edit_image) 25 MB por archivo
Audios para transcripción máx. ~2 min por archivo (timeout 524 si supera)
Imágenes de referencia (edit_image) hasta 4
Web search (vía MCP remoto) 20 req/min, 500 req/día

Variables de entorno

Variable Obligatoria Descripción
NAN_API_KEY Sí API key de NaN
NAN_BASE_URL No Base URL de la API (default https://api.nan.builders/v1)
NAN_OUTPUT_DIR No Directorio de salida (default ~/nan-mcp-output)
NAN_TIMEOUT_MS No Timeout por petición en ms (default 180000, 3 min)

Desarrollo

Estructura

nan-mcp-server/
├── server.js            # Servidor MCP + herramientas
├── test/server.test.js  # Tests (node:test, sin dependencias extra)
├── .github/workflows/   # ci.yml (tests) + publish.yml (npm)
├── package.json
└── README.md

Testing

Los tests usan el test runner nativo de Node (node:test), sin dependencias adicionales. No hacen llamadas a la API (usan un valor de prueba para NAN_API_KEY), así que se ejecutan sin red ni credenciales.

npm test

Para probar el servidor manualmente contra la API real (requiere key):

NAN_API_KEY=sk-tu-key-aqui node server.js

Y luego una llamada de ejemplo vía stdio:

printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' \
  | node server.js

Publicación / CI

  • El código no contiene secretos: NAN_API_KEY se lee solo del entorno.
  • El .gitignore excluye node_modules/, logs y .env.
  • .github/workflows/ci.yml ejecuta los tests en cada push y PR a main sobre Node 18, 20, 22 y 24, más un job strict-deps con pnpm: su node_modules sin hoisting hace fallar cualquier import de un paquete no declarado en package.json (npm lo dejaría pasar silenciosamente).
  • .github/workflows/publish.yml publica en npm al crear un release en GitHub, vía trusted publishing (OIDC), sin token en secrets.

Notas

  • Las imágenes y audios se guardan en ~/nan-mcp-output/ (configurable con NAN_OUTPUT_DIR). Los nombres se sanitizan (sin path traversal) y nunca se sobrescriben archivos existentes: si el nombre ya está ocupado se añade -2, -3, etc.
  • Los archivos de entrada (STT / edit_image) se cargan en memoria; para archivos muy grandes conviene dividirlos.
  • El servidor no contiene ningún secreto en el código: solo lee NAN_API_KEY del entorno.

Licencia

MIT — ver LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选