MCP Personal Notes Server

MCP Personal Notes Server

MCP server for managing personal notes with tools to save, list, get, search, and delete notes, persisting data in PostgreSQL.

Category
Visit Server

README

πŸ“ MCP Personal Notes Server

A beginner-friendly Model Context Protocol (MCP) server that lets AI applications manage personal notes through structured tools.

Node.js MCP PostgreSQL Render

πŸš€ Live Demo

Server: https://mcp-personal-notes-server.onrender.com/

MCP Endpoint: https://mcp-personal-notes-server.onrender.com/mcp

The root URL intentionally returns a small JSON status response. The /mcp endpoint is the actual MCP protocol endpoint and is meant to be used by an MCP client or MCP Inspector.


πŸ“Έ Project Screenshots

🌐 Live Server

The deployed server returns a health/status response from the root URL.

Live server status

πŸ”Œ MCP Inspector β€” Connected

The deployed Streamable HTTP MCP endpoint is connected successfully through MCP Inspector.

MCP Inspector connected

🧰 Available MCP Tools

The server exposes five note-management tools: save_note, list_notes, get_note, search_notes, and delete_note.

MCP tools

πŸ“ Save Note

A note can be created directly through the save_note MCP tool.

Save note tool

πŸ—„οΈ PostgreSQL Database

Notes created through the MCP server are persisted in PostgreSQL.

PostgreSQL notes table

☁️ Render Deployment

The production logs show PostgreSQL initialization, the MCP server starting, and the deployed service becoming available.

Render deployment logs


πŸ’‘ What is this project?

The MCP Personal Notes Server is a simple project for learning how the Model Context Protocol works.

Instead of building a traditional notes REST API, this project exposes note-management capabilities as MCP tools.

An MCP-compatible AI client can use tools such as:

  • save_note
  • list_notes
  • get_note
  • search_notes
  • delete_note

The project demonstrates the complete flow:

AI / MCP Client
       β”‚
       β”‚ MCP
       β–Ό
MCP Personal Notes Server
       β”‚
       β”‚ SQL
       β–Ό
PostgreSQL

✨ Features

  • πŸ“ Create personal notes
  • πŸ“‹ List saved notes
  • πŸ”Ž Search notes by title, content, or category
  • πŸ“– Retrieve a note by ID
  • πŸ—‘οΈ Delete notes
  • πŸ—„οΈ PostgreSQL persistence
  • 🌐 Deployed MCP endpoint
  • πŸ” Environment-variable based database configuration
  • πŸ§ͺ Testable with MCP Inspector
  • πŸ“¦ Beginner-friendly Node.js implementation

πŸ› οΈ Tech Stack

Technology Purpose


JavaScript Application language Node.js Runtime Express.js HTTP server MCP SDK Model Context Protocol implementation PostgreSQL Persistent database Neon Hosted PostgreSQL Render Application deployment MCP Inspector MCP testing


🧰 MCP Tools

1. save_note

Creates a new note.

Input:

{
  "title": "Learn MCP",
  "content": "Understand how MCP tools work.",
  "category": "Learning"
}

2. list_notes

Returns all saved notes.

Input:

{}

3. get_note

Retrieves one note using its UUID.

Input:

{
  "id": "NOTE_UUID"
}

4. search_notes

Searches note title, content, and category.

Input:

{
  "query": "MCP"
}

5. delete_note

Deletes a note using its UUID.

Input:

{
  "id": "NOTE_UUID"
}

πŸ—οΈ Architecture

                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚    AI / MCP Client   β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β”‚ MCP / HTTP
                                    β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   MCP Personal Notes Server β”‚
                    β”‚                             β”‚
                    β”‚  save_note                  β”‚
                    β”‚  list_notes                 β”‚
                    β”‚  get_note                   β”‚
                    β”‚  search_notes               β”‚
                    β”‚  delete_note                β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   β”‚
                                   β”‚ SQL
                                   β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚         PostgreSQL           β”‚
                    β”‚                             β”‚
                    β”‚           notes             β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Deployment Architecture

GitHub
   β”‚
   β”‚ Deploy from repository
   β–Ό
Render
   β”‚
   β”‚ DATABASE_URL
   β–Ό
Neon PostgreSQL

πŸ“ Project Structure

mcp-personal-notes-server/
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ server.js
β”‚   β”œβ”€β”€ database.js
β”‚   β”œβ”€β”€ database-init.js
β”‚   β”œβ”€β”€ storage.js
β”‚   β”‚
β”‚   └── tools/
β”‚       └── notes.js
β”‚
β”œβ”€β”€ .env
β”œβ”€β”€ .gitignore
β”œβ”€β”€ package.json
β”œβ”€β”€ package-lock.json
└── README.md

Important files

src/server.js

Creates the Express application, MCP server, HTTP transport, health endpoint, and /mcp endpoint.

src/database.js

Creates the PostgreSQL connection pool.

src/database-init.js

Creates the notes table when the server starts.

src/storage.js

Contains database operations for creating, reading, searching, and deleting notes.

src/tools/notes.js

Registers the five MCP tools.


βš™οΈ Run Locally

1. Clone the repository

git clone https://github.com/SRCarlo/mcp-personal-notes-server.git
cd mcp-personal-notes-server

2. Install dependencies

npm install

3. Create .env

Create a .env file in the project root:

PORT=3000
DATABASE_URL=YOUR_POSTGRESQL_CONNECTION_STRING

Never commit .env to GitHub.

4. Start development server

npm run dev

Expected output:

PostgreSQL connected successfully.
Database initialized successfully.
MCP Personal Notes Server running on port 3000
MCP endpoint: http://localhost:3000/mcp

5. Check health

Open:

http://localhost:3000/health

Expected:

{
  "status": "healthy"
}

πŸ§ͺ Test with MCP Inspector

Start MCP Inspector:

npx @modelcontextprotocol/inspector

For local testing use:

http://localhost:3000/mcp

For the deployed server use:

https://mcp-personal-notes-server.onrender.com/mcp

Select:

Streamable HTTP

After connecting, open the Tools tab.

You should see:

save_note
list_notes
get_note
search_notes
delete_note

☁️ Deployment

This project is deployed using:

  • Render for the Node.js MCP server
  • Neon for PostgreSQL

Render configuration

Build Command

npm install

Start Command

npm start

Environment variables

NODE_ENV=production
DATABASE_URL=YOUR_NEON_CONNECTION_STRING

The application uses Render's PORT environment variable automatically:

const PORT = process.env.PORT || 3000;

πŸ”’ Security

This project follows a few basic security practices:

  • Database credentials are stored in environment variables.
  • .env is excluded from Git.
  • SQL queries use PostgreSQL parameterized queries.
  • The application does not expose the database connection string.
  • Production configuration is supplied through Render environment variables.

Never publish your real DATABASE_URL in source code or GitHub.


🧠 What I Learned

This project was built to understand:

  • What MCP is
  • How MCP servers expose tools
  • How an AI client can discover and call tools
  • Streamable HTTP transport
  • Node.js server development
  • PostgreSQL integration
  • Environment variables
  • MCP Inspector testing
  • Git and GitHub workflow
  • Cloud deployment
  • Connecting a deployed MCP server to an MCP client

πŸ—ΊοΈ Future Improvements

Possible next versions:

  • [ ] Add update_note
  • [ ] Add get_recent_notes
  • [ ] Add tags
  • [ ] Add pagination
  • [ ] Add authentication
  • [ ] Add note ownership/user accounts
  • [ ] Add full-text PostgreSQL search
  • [ ] Add automated tests
  • [ ] Add CI/CD with GitHub Actions
  • [ ] Connect to an AI client for natural-language note management

🎯 Example AI Workflow

Once connected to an MCP-compatible AI client, the goal is to support natural-language requests such as:

Save a note titled "Learn Spring Boot" with the content "Study Spring Security and REST APIs" under the category "Learning".

The AI can discover the available MCP tools and call:

save_note()

The resulting note is stored in PostgreSQL.

Another request could be:

Find my notes about MCP.

The AI can use:

search_notes()

This is the main idea behind the project:

Natural Language
       ↓
AI
       ↓
MCP Tool
       ↓
Your Server
       ↓
PostgreSQL

πŸ“Œ Project Status

Status: 🟒 Deployed and working

MCP Transport: Streamable HTTP

Database: PostgreSQL

Deployment: Render + Neon

Testing: MCP Inspector


πŸ‘¨β€πŸ’» Author

Shubham Raut β€” SRCarlo

Full Stack Java Developer | AI β€’ Gen AI β€’ IoT β€’ Cloud

I build full-stack applications, AI-powered projects, and developer-focused tools while continuously exploring new technologies.

πŸ”— GitHub: @SRCarlo | 🌐 Portfolio: Shubham Raut | πŸ’Ό LinkedIn: Shubham Raut


πŸ“„ License

This project is available under the MIT License.


⭐ Support

If you found this project useful for learning MCP, AI tools, or backend development, consider giving the repository a ⭐.


<p align="center"> Built with ❀️ by <a href="https://github.com/SRCarlo">Shubham Raut</a> </p>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured