MCP Personal Notes Server
MCP server for managing personal notes with tools to save, list, get, search, and delete notes, persisting data in PostgreSQL.
README
π MCP Personal Notes Server
A beginner-friendly Model Context Protocol (MCP) server that lets AI applications manage personal notes through structured tools.
π 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.

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

π§° Available MCP Tools
The server exposes five note-management tools: save_note, list_notes, get_note, search_notes, and delete_note.

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

ποΈ PostgreSQL Database
Notes created through the MCP server are persisted in PostgreSQL.

βοΈ Render Deployment
The production logs show PostgreSQL initialization, the MCP server starting, and the deployed service becoming available.

π‘ 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_notelist_notesget_notesearch_notesdelete_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.
.envis 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
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.