Mowen Note
Un servidor MCP para interactuar con la API de Mowen Note, que permite la gestión de notas y la carga de archivos dentro de clientes MCP.
Documentación
Servidor MCP de Mowen Note
Este es un servidor basado en el Protocolo de Contexto de Modelo (MCP) para interactuar con el software Mowen Note. A través de este servidor, puedes crear, editar y gestionar notas de Mowen Note directamente en aplicaciones compatibles con MCP (como Cursor, Claude Desktop, etc.).
Este proyecto es una colaboración entre la comunidad Yizhi Yanhua y Mowen.
🆕 Versión sin instalación disponible (apta para principiantes)
Cómo usarlo (ejemplo con Windows)
- Descarga mowen-mcp-server-windows-x64-v1.0.0.zip y extrae mowen-mcp-server.exe
- En el cliente MCP, modifica el valor de
commandy reemplázalo con la ruta del archivo mowen-mcp-server.exe
{
"mcpServers": {
"mowen-mcp-server": {
"command": "D:\\mowen\\mowen-mcp-server.exe",
"args": [],
"env": {
"MOWEN_API_KEY": "xxxxxxxxxxxxxxx"
}
}
}
}
✨ Característica de la última versión: ¡soporte para carga de archivos! Ahora puedes insertar imágenes, audio y archivos PDF en tus notas, con soporte para archivos locales y URLs remotas.
🆕 Vista previa de nuevas funciones (v0.2.0)
📁 Soporte de carga de archivos
⚠️ Importante: las rutas de archivo deben ser rutas absolutas, porque el servidor MCP y el cliente se ejecutan en directorios de trabajo diferentes.
# 本地图片文件
{
"type": "file",
"file_type": "image",
"source_type": "local",
"source_path": "C:\\Users\\用户名\\Documents\\image.jpg", # Windows绝对路径
"metadata": {
"alt": "图片描述",
"align": "center"
}
}
# 远程音频文件(URL不受路径限制)
{
"type": "file",
"file_type": "audio",
"source_type": "url",
"source_path": "https://example.com/audio.mp3",
"metadata": {
"show_note": "00:00 开始\n01:30 主要内容"
}
}
📝 Citas de párrafos
{
"type": "quote",
"texts": [
{"text": "重要提醒:", "bold": true},
{"text": "支持富文本格式的引用段落"}
]
}
🔗 Notas con enlaces internos
{
"type": "note",
"note_id": "VPrWsE_-P0qwrFUOygGs8"
}
Características
- 🔗 Compatible con el protocolo MCP: soporta la versión más reciente de MCP 1.9.1
- 📝 Crear notas: formato de texto enriquecido unificado, con soporte para párrafos, negrita, resaltado, enlaces, citas y notas con enlaces internos
- ✏️ Editar notas: formato de texto enriquecido unificado, reemplaza completamente el contenido de la nota
- 📁 Carga de archivos: soporta carga de imágenes, audio y archivos PDF, tanto desde archivos locales como URLs remotas
- 💬 Citas de párrafos: crea bloques de texto citado, con soporte para formato de texto enriquecido
- 🔗 Notas con enlaces internos: referencia otras notas, creando vínculos entre notas
- 🔒 Configuración de privacidad: establece permisos de nota pública, privada o pública por reglas
- 🔄 Gestión de claves: función para restablecer la clave de API
- 🎨 Interfaz unificada: todas las operaciones de notas utilizan un formato de parámetros de texto enriquecido consistente
Inicio rápido
Requisitos previos
- Python 3.10+
- Cuenta de miembro Pro de Mowen (las funciones de API solo están disponibles para miembros Pro)
- Clave de API de Mowen (obtenerla en el mini programa de Mowen)
Métodos de instalación
Método 1: Instalación desde el código fuente (recomendado)
- Clona el proyecto:
git clone https://github.com/z4656207/mowen-mcp-server.git
cd mowen-mcp-server
- Instala las dependencias:
pip install -e .
Método 2: Instalar dependencias directamente
pip install mcp httpx pydantic
Configurar la clave de API
Windows PowerShell
$env:MOWEN_API_KEY="你的墨问API密钥"
Linux/macOS
export MOWEN_API_KEY="你的墨问API密钥"
Configuración persistente
Crea el archivo .env:
MOWEN_API_KEY=你的墨问API密钥
Configurar el cliente MCP
Método 1: Instalación como módulo (recomendado)
Si usaste pip install -e . para instalar, agrega en la configuración de Cursor:
{
"mcpServers": {
"mowen-mcp-server": {
"command": "python",
"args": ["-m", "mowen_mcp_server.server"],
"env": {
"MOWEN_API_KEY": "${env:MOWEN_API_KEY}"
}
}
}
}
Método 2: Ruta de archivo directa
Si no tienes un paquete instalado, puedes especificar directamente la ruta del archivo:
{
"mcpServers": {
"mowen-mcp-server": {
"command": "python",
"args": ["绝对路径/mowen-mcp-server/src/mowen_mcp_server/server.py"],
"env": {
"MOWEN_API_KEY": "${env:MOWEN_API_KEY}"
}
}
}
}
Nota: Reemplaza 绝对路径 con la ruta real de tu proyecto, por ejemplo:
- Windows:
"D:/CODE/mowen-mcp-server/src/mowen_mcp_server/server.py" - macOS/Linux:
"/home/user/mowen-mcp-server/src/mowen_mcp_server/server.py"
Herramientas disponibles
create_note
Crea una nueva nota de Mowen Note con formato de texto enriquecido unificado
Parámetros:
paragraphs(array, obligatorio): lista de párrafos de texto enriquecido, cada párrafo contiene nodos de textoauto_publish(booleano, opcional): si publicar automáticamente, el valor predeterminado es falsetags(array de cadenas, opcional): lista de etiquetas de la nota
Tipos de párrafo compatibles:
- Párrafo normal (predeterminado):
{"texts": [...]} - Párrafo de cita:
{"type": "quote", "texts": [...]} - Nota con enlace interno:
{"type": "note", "note_id": "笔记ID"} - Párrafo de archivo:
{"type": "file", "file_type": "image|audio|pdf", "source_type": "local|url", "source_path": "绝对路径", "metadata": {...}}
Ejemplo de formato de párrafo:
[
{
"texts": [
{"text": "普通文本"},
{"text": "加粗文本", "bold": true},
{"text": "高亮文本", "highlight": true},
{"text": "链接文本", "link": "https://example.com"}
]
},
{
"type": "quote",
"texts": [
{"text": "这是引用段落"},
{"text": "支持富文本", "bold": true}
]
},
{
"type": "note",
"note_id": "VPrWsE_-P0qwrFUOygxxx"
},
{
"type": "file",
"file_type": "image",
"source_type": "local",
"source_path": "C:\\Users\\用户名\\Documents\\image.jpg",
"metadata": {
"alt": "图片描述",
"align": "center"
}
}
]
Ejemplo de texto simple:
[
{
"texts": [
{"text": "这是一段简单的文本内容"}
]
}
]
edit_note
Edita el contenido de una nota existente con formato de texto enriquecido unificado
Parámetros:
note_id(cadena, obligatorio): ID de la nota a editarparagraphs(array, obligatorio): lista de párrafos de texto enriquecido, reemplazará completamente el contenido original
Nota: Esta operación reemplaza completamente el contenido original de la nota, no lo agrega. Admite todos los tipos de párrafo (párrafo normal, párrafo de cita, nota con enlace interno, párrafo de archivo).
set_note_privacy
Establece los permisos de privacidad de la nota
Parámetros:
note_id(cadena): ID de la notaprivacy_type(cadena): tipo de privacidad (public/private/rule)no_share(booleano, opcional): si prohibir compartir (solo válido para tipo rule)expire_at(entero, opcional): marca de tiempo de expiración (solo válido para tipo rule, 0 significa que nunca expira)
reset_api_key
Restablece la clave de API de Mowen
Nota: Esta operación invalidará la clave actual inmediatamente
Ejemplos de uso
Crear una nota de texto simple
# 通过MCP工具调用
create_note(
paragraphs=[
{
"texts": [
{"text": "今天学习了Python编程,重点是异步编程概念"}
]
}
],
auto_publish=True,
tags=["学习", "Python", "编程"]
)
Crear una nota de texto enriquecido
# 通过MCP工具调用
create_note(
paragraphs=[
{
"texts": [
{"text": "重要提醒:", "bold": true},
{"text": "明天的会议已改期"}
]
},
{
"texts": [
{"text": "详情请查看:", "highlight": true},
{"text": "会议通知", "link": "https://example.com/meeting"}
]
}
],
auto_publish=True,
tags=["会议", "通知"]
)
Crear una nota compleja con citas y enlaces internos
# 通过MCP工具调用
create_note(
paragraphs=[
{
"texts": [
{"text": "项目进展报告", "bold": true}
]
},
{
"type": "quote",
"texts": [
{"text": "本周完成了主要功能开发,", "highlight": true},
{"text": "详见技术文档", "link": "https://docs.example.com"}
]
},
{
"type": "note",
"note_id": "VPrWsE_-P0qwrFUOygGs8"
},
{
"texts": [
{"text": "下周计划:开始测试阶段"}
]
}
],
auto_publish=True,
tags=["项目", "进展", "报告"]
)
Crear una nota con archivos
# 通过MCP工具调用
create_note(
paragraphs=[
{
"texts": [
{"text": "项目截图和演示", "bold": true}
]
},
{
"type": "file",
"file_type": "image",
"source_type": "local",
"source_path": "C:\\Users\\user\\Desktop\\screenshot.png",
"metadata": {
"alt": "项目主界面截图",
"align": "center"
}
},
{
"texts": [
{"text": "演示视频(音频):"}
]
},
{
"type": "file",
"file_type": "audio",
"source_type": "url",
"source_path": "https://example.com/demo.mp3",
"metadata": {
"show_note": "00:00 项目介绍\n01:30 功能演示\n03:00 总结"
}
},
{
"texts": [
{"text": "详细文档见附件:"}
]
},
{
"type": "file",
"file_type": "pdf",
"source_type": "local",
"source_path": "C:\\Users\\user\\Documents\\project_doc.pdf"
}
],
auto_publish=True,
tags=["项目", "文档", "演示"]
)
Editar una nota
# 通过MCP工具调用
edit_note(
note_id="note_123456",
paragraphs=[
{
"texts": [
{"text": "更新:", "bold": true},
{"text": "项目进度已完成80%"}
]
},
{
"type": "quote",
"texts": [
{"text": "详细报告请查看:", "highlight": true},
{"text": "项目文档", "link": "https://example.com/report"}
]
},
{
"type": "note",
"note_id": "related_note_id"
}
]
)
Límites de cuota de API
Según la documentación de la API de Mowen, cada interfaz tiene los siguientes límites:
| API | Cuota | Límite de frecuencia | Descripción |
|---|---|---|---|
| Creación de notas | 100 veces/día | 1 vez/segundo | Solo se cuenta como 1 si la llamada tiene éxito, es decir: se pueden crear 100 notas al día mediante la API |
| Edición de notas | 1000 veces/día | 1 vez/segundo | Solo se cuenta como 1 si la llamada tiene éxito, es decir: se pueden editar 1000 veces al día mediante la API |
| Configuración de notas | 100 veces/día | 1 vez/segundo | Solo se cuenta como 1 si la llamada tiene éxito |
Estructura del proyecto
mowen-mcp-server/
├── src/
│ └── mowen_mcp_server/
│ ├── __init__.py # 包初始化
│ ├── server.py # MCP服务器主程序
│ └── config.py # 配置管理
├── examples/
│ └── create_note/ # 创建笔记案例
├── pyproject.toml # 项目配置
├── README.md # 项目文档
├── CHANGELOG.md # 更新日志
└── 墨问API.md # 墨问API详细文档
Documentación relacionada
- Documentación en línea de la API de Mowen: https://mowen.apifox.cn/
- Documentación local de la API: para la documentación detallada de la API de Mowen, consulta el archivo
墨问API.mddel proyecto - Documentación del protocolo MCP: Model Context Protocol
Preguntas frecuentes
P: ¿Por qué no funciona el método de módulo?
R: Asegúrate de haber instalado el paquete con pip install -e ., o usa el método de configuración con ruta de archivo directa.
P: ¿Dónde obtengo la clave de API?
R: Inicia sesión en el mini programa de Mowen, encuentra la clave de API en el módulo de desarrollador de tu página de perfil. Se requiere membresía Pro.
P: ¿Puedo editar notas creadas en el mini programa?
R: Actualmente no es compatible, solo se pueden editar notas creadas mediante la API.
P: ¿Cómo uso las citas de párrafos y las notas con enlaces internos?
R: Las citas de párrafos usan el formato {"type": "quote", "texts": [...]}, y las notas con enlaces internos usan el formato {"type": "note", "note_id": "笔记ID"}. Las citas de párrafos admiten todos los formatos de texto enriquecido (negrita, resaltado, enlaces).
P: ¿De dónde obtengo el note_id para las notas con enlaces internos?
R: El note_id es el ID de la nota devuelto al crear la nota, o el ID de una nota existente en Mowen. Ten en cuenta que solo puedes referenciar notas creadas mediante la API.
P: ¿Por qué solo existe el parámetro paragraphs y no un parámetro content simple?
R: Unificamos el diseño de la interfaz; el formato de texto enriquecido permite admitir contenido más variado. Incluso para texto simple, es fácil usar el formato paragraphs: [{"texts": [{"text": "你的文本"}]}]
P: ¿Cómo migro desde llamadas a la API de versiones anteriores?
R: Si antes usabas create_note(content="文本"), ahora debes cambiarlo a create_note(paragraphs=[{"texts": [{"text": "文本"}]}]). Las funciones de texto enriquecido permanecen iguales.
P: ¿Por qué aparece "archivo no encontrado" al cargar archivos?
R: Debes usar rutas absolutas. El servidor MCP y el cliente se ejecutan en directorios de trabajo diferentes; las rutas relativas fallarán al resolverse.
- ✅ Correcto:
"C:\\Users\\用户名\\Documents\\image.jpg"(Windows) - ✅ Correcto:
"/Users/用户名/Documents/image.jpg"(macOS/Linux) - ❌ Incorrecto:
"./image.jpg"o"image.jpg"(rutas relativas)
P: ¿Qué tipos de archivo son compatibles?
R: Se admiten tres tipos de archivo:
- Imagen (image): .gif, .jpeg, .jpg, .png, .webp (máximo 50 MB)
- Audio (audio): .mp3, .mp4, .m4a (máximo 200 MB)
- PDF (pdf): .pdf (máximo 100 MB)
P: ¿Qué limitaciones tiene la carga de archivos desde URL remota?
R: Las URLs remotas no están sujetas a restricciones de formato de ruta, pero el archivo debe ser accesible públicamente y cumplir con los límites de tipo y tamaño de archivo.
Contribución al desarrollo
¡Bienvenidos los Issues y Pull Requests!
Configuración del entorno de desarrollo
- Clona el proyecto
- Instala las dependencias de desarrollo:
pip install -e . - Configura la variable de entorno de la clave de API
- Ejecuta las pruebas
Licencia
Este proyecto utiliza la licencia MIT. Consulta el archivo LICENSE para más detalles.
Aviso legal
Este proyecto es una herramienta de terceros desarrollada de forma independiente y no está afiliada a Mowen. Asegúrate de cumplir con los términos de servicio de Mowen antes de usarlo.