AiNotesServer

AiNotesServer

Un servidor MCP para crear, almacenar y recuperar notas de texto a través de una interfaz de IA conversacional como Claude Desktop.

Category
访问服务器

README

📝 AiNotes Server

MCP Compatible Python Claude Desktop

Un servidor MCP (Model Context Protocol) para crear, almacenar y recuperar notas de texto de forma sencilla a través de una interfaz de IA conversacional como Claude Desktop. Este pequeño proyecto está enfocado para entender los conceptos básicos sobre MCP: tools, resources y prompts.

🌟 Características

  • ✅ Añadir nuevas notas
  • 📖 Leer todas las notas almacenadas
  • 🔍 Obtener la última nota añadida
  • 📊 Generar resúmenes de notas mediante IA

📚 Explicación del Código

Este proyecto implementa un servidor MCP (Model Context Protocol) para gestionar notas de texto. Vamos a desglosar cada parte del código para entender su funcionamiento.

Importación de Módulos

from mcp.server.fastmcp import FastMCP
import os
  • FastMCP: La clase principal del SDK de MCP en Python que facilita la creación de servidores MCP.
  • os: Módulo de Python para interactuar con el sistema operativo, usado aquí para manejar rutas de archivos.

Configuración del Archivo de Notas

NOTES_FILE = os.path.join(os.path.dirname(__file__), "ainotes.txt")

def check_and_create_file():
    """
    Comprueba  la existencia del fichero de texto donde
    se guardan las notas. Si no existe se crea vacio
    """
    if not os.path.exists(NOTES_FILE):
        with open(NOTES_FILE, "w") as f:
            f.write("")
  • NOTES_FILE: Define la ruta al archivo de texto donde se guardarán las notas.
  • check_and_create_file(): Función utilitaria que verifica si el archivo existe y lo crea vacío si no.

Creación del Servidor MCP

# Create an MCP server
mcp = FastMCP("AiNotesServer")

Instancia un nuevo servidor MCP con el nombre "AiNotesServer". Este objeto será usado para registrar herramientas, recursos y prompts.

Herramientas (Tools)

1. Añadir una Nota

@mcp.tool()
def add_note(message: str) -> str:
    """
    Añade una nueva nota al fichero de notas.

    Args:
        message (str): La nota a ser añadida.

    Returns:
        str: Mensaje de confirmación de que se ha añadido la nota.
    """
    check_and_create_file()
    with open(NOTES_FILE, "a") as f:
        f.write(message + "\n")
    return "Nota añadida"
  • @mcp.tool(): Decorador que registra la función como una herramienta en el servidor MCP.
  • La función recibe un mensaje de texto y lo añade al archivo de notas.
  • Los comentarios en formato docstring proporcionan información que el LLM utilizará para entender cómo invocar la herramienta.

2. Leer Todas las Notas

@mcp.tool()
def read_notes() -> str:
    """
    Lee y devuelve todas las notas del fichero de notas.

    Returns:
        str: Devuelve todas las notas separadas por saltos de linea.
             Si no hubiera notas se devuelve un mensaje.
    """
    check_and_create_file()
    with open(NOTES_FILE, "r") as f:
        content = f.read().strip()
    return content or "No se han encontrado notas."
  • Esta herramienta lee todas las notas almacenadas y las devuelve como una cadena de texto.
  • Si no hay notas, devuelve un mensaje indicándolo.

Recursos (Resources)

@mcp.resource("notes://latest")
def get_latest_note() -> str:
    """
    Devuelve la ultima nota añadida al fichero.

    Returns:
        str: La ultima nota. En caso de no existir, se devuelve un mensaje.
    """
    check_and_create_file()
    with open(NOTES_FILE, "r") as f:
        lines = f.readlines()
    return lines[-1].strip() if lines else "No se han encontrado notas."
  • @mcp.resource("notes://latest"): Decorador que registra la función como un recurso en el servidor MCP.
  • Los recursos en MCP son entidades que proporcionan datos contextuales, en este caso, la última nota añadida.
  • El URI notes://latest es cómo el cliente accederá a este recurso.

Prompts

@mcp.prompt()
def note_summary_prompt() -> str:
    """
    Mediante un prompt se le solicita a la IA que haga un resumen de las notas

    Returns:
        str: Un prompt con las notas solicitando un resumen de las mismas.
             Si no existen notas se devuelve un mensaje.
    """
    check_and_create_file()
    with open(NOTES_FILE, "r") as f:
        content = f.read().strip()
    if not content:
        return "No se han encontrado notas."

    return f"Hazme un resumen de las siguientes notas: {content}"
  • @mcp.prompt(): Decorador que registra la función como un prompt en el servidor MCP.
  • Los prompts son plantillas predefinidas para interacciones con la IA.
  • Este prompt solicita a la IA que haga un resumen de todas las notas almacenadas.

🚀 Instalación y Uso

Requisitos previos

  • Python 3.10 o superior
  • Claude Desktop (para usar el servidor con Claude)

Configuración del entorno

  1. Clona este repositorio o crea un nuevo directorio:
mkdir ainotes
cd ainotes
  1. Crea y activa un entorno virtual con uv:
uv init .
uv venv
source .venv/bin/activate  # En Windows: .venv\Scripts\activate
  1. Instala las dependencias:
uv add "mcp[cli]"
  1. Se ha creado un archivo main.py en el cual escribiremos el código.

Prueba con el Inspector MCP

Para probar el servidor usando el Inspector MCP (una herramienta visual para inspeccionar servidores MCP):

mcp dev main.py

Esto abrirá una interfaz web donde podrás explorar y probar las herramientas, recursos y prompts del servidor. Para que funcione correctamente debe de tener instalado en su ordenador Node y sus dependencías.

Instalación en Claude Desktop

Para usar el servidor con Claude Desktop:

  1. Asegúrate de tener Claude Desktop instalado y actualizado.

  2. Instala el servidor en Claude Desktop:

mcp install main.py
  1. Reinicia Claude Desktop para que reconozca el nuevo servidor.

💡 Uso con Claude Desktop

Una vez instalado, puedes interactuar con tu servidor AiNotes a través de Claude Desktop:

  • Añadir una nota: "Por favor, añade esta nota: Reunión con el equipo mañana a las 10 AM"
  • Leer notas: "¿Puedes mostrarme todas mis notas?"
  • Ver última nota: "¿Cuál fue mi última nota?"
  • Resumir notas: "Haz un resumen de mis notas, por favor"

Claude utilizará automáticamente las herramientas, recursos y prompts expuestos por tu servidor MCP según sea necesario para responder a tus solicitudes.

🛠️ Estructura del Protocolo MCP

Este proyecto utiliza tres primitivas principales de MCP:

  1. Herramientas (Tools): Funciones que pueden ser llamadas por el LLM para realizar acciones (añadir y leer notas).
  2. Recursos (Resources): Datos contextuales que pueden ser consumidos por los LLMs (la última nota).
  3. Prompts: Plantillas predefinidas para tareas específicas (resumen de notas).

Cada uno de estos componentes sirve para un propósito diferente en la interacción entre la aplicación y el modelo de lenguaje.

🛠️ Mejoras

Este proyecto es educativo por lo que se ha obviado cierta funcionalidad para simplicarlo al máximo,como la gestión de Excepciones.

  • Añadir excepciones relacionadas con el fichero de notas.
  • Cambiar el uso de un fichero de texto por una base de datos Sqllite, con las modificaciones pertienentes en las tools.
  • Gestion de prioridades y fechas en las notas.

📘 Más información

Para aprender más sobre el Protocolo de Contexto de Modelo (MCP):

📄 Licencia

Este proyecto está bajo la Licencia MIT.

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选