arashjalalat/azure-functions-notes-mcp-server
If you are the rightful owner of azure-functions-notes-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
An Azure Functions-based MCP server implementation for managing notes and related functionality.
Azure Functions Notes MCP Server
An Azure Functions-based MCP (Model Context Protocol) server implementation for managing notes and related functionality. This project demonstrates how to build a MCP server using Azure Functions, following best practices in a cloud native way.
Features
- MCP Protocol Support: Implements the Model Context Protocol for seamless integration with GitHub Copilot Chat and other MCP-aware clients
- Azure Functions: Built on .NET 8.0 using the latest Azure Functions runtime
- Infrastructure as Code: Complete infrastructure definition using Bicep templates
- Azure Integration: Integration with Azure services including Application Insights for monitoring
- Role-Based Access Control (RBAC): Access control for various Azure resources
MCP Tools
The server provides the following MCP tools for note management:
| Tool Name | Description |
|---|---|
save_note | Saves a note with a title, category, tags, and content. Use for any type of note: meetings, tasks, ideas, code snippets, reminders, etc. |
get_note | Retrieves a note by its title |
list_notes | Lists all saved notes with their titles and categories |
search_notes | Search notes by tags or category |
delete_note | Deletes a note by its title |
Tool Properties
-
save_note:
title(required): The title or identifier for the notecategory: The category of the note (e.g., meeting, task, idea, code-snippet, reminder)tags: Comma-separated tags for organizing the notecontent(required): The main content of the note
-
get_note:
title(required): The title of the note to retrieve
-
search_notes:
query: Search query for tags or category
-
delete_note:
title(required): The title of the note to delete
Prerequisites
For local development:
- Azure Developer CLI (azd)
- .NET 8.0 SDK
- Azure Functions Core Tools
- An Azure subscription
- Visual Studio Code (recommended) with:
- C# Dev Kit extension
- Azure Functions extension
- Bicep extension
Getting Started
Local Development
- Clone the repository:
git clone <repository-url>
cd azure-functions-mcp-server
- Install dependencies:
dotnet restore
- Configure local settings:
- Copy
local.settings.sample.jsontolocal.settings.json
- Run the project locally:
cd NotesMcp
func start
Using with VS Code and GitHub Copilot
To use the MCP tools in VS Code, you'll need to configure the MCP endpoint in your workspace. Create a .vscode/mcp.json file with the configuration based on your environment:
Local Development
When running the Function App locally:
{
"servers": {
"notes-mcp": {
"type": "http",
"url": "http://localhost:7071/runtime/webhooks/mcp"
}
}
}
Deployment
The project uses Azure Developer CLI (azd)
Deploy to Azure
- Initialize the environment:
azd init
- Login to Azure:
azd auth login
- Provision and deploy:
azd up
This command will:
- Create required Azure resources
- Deploy the application code
- Set up configurations
- Output the Function App URL
To remove all resources:
azd down --purge
Usage after deployment
When using the deployed Function App in Azure the mcp.json from the client looks like this:
{
"inputs": [
{
"type": "promptString",
"id": "function-key",
"description": "Azure Function App Key",
"password": true
}
],
"servers": {
"notes-mcp": {
"type": "http",
"url": "https://<replace with correct value>/runtime/webhooks/mcp", //See Function App URL
"headers": {
"x-functions-key": "${input:function-key}"
}
}
}
}
Examples
- Saving a note
- Select the text you want to save in VS Code
- Open GitHub Copilot Chat
- Switch to Agent mode (click the robot icon)
- Type a command like:
Save this selected text as a note titled "git-commands" with category "code-snippet" and tags "git,commands,reference"
save_notetool with your selected text as content.
- Retrieving a note
- In GitHub Copilot Chat (Agent mode), type:
Get the note with title "git-commands"
get_notetool to fetch and display the note. - In GitHub Copilot Chat (Agent mode), type:
-
Listing all notes
- In GitHub Copilot Chat (Agent mode), type:
List all my saved notes
This will use the
list_notestool to show all your saved notes. - In GitHub Copilot Chat (Agent mode), type:
-
Searching notes
- In GitHub Copilot Chat (Agent mode), type:
Search for notes with tag "git"
This will use the
search_notestool to find relevant notes. - In GitHub Copilot Chat (Agent mode), type:
- Delete a note
- In GitHub Copilot Chat (Agent mode), type:
Delete my note called git-commands
delete_notetool to delete the note. - In GitHub Copilot Chat (Agent mode), type:
- Listing all notes (verify)
- In GitHub Copilot Chat (Agent mode), type:
List all my saved notes
list_notestool to show all your saved notes. Verify that after delete nothing is saved anymore. - In GitHub Copilot Chat (Agent mode), type:
Infrastructure
The project uses Bicep for Infrastructure as Code with the following components:
main.bicep: Main infrastructure templateapp/api.bicep: API-related resourcesapp/monitoring.bicep: Monitoring setup with Application Insightsrbac/: Role-based access control definitionsappinsights-access.bicepstorage-access.bicep
Guidelines & best practices
Region availability
Azure Function App availability (including Flex Consumption) varies by region, verify availability here.
Choose the same region for related resources (Function App, Storage account) to reduce latency and egress costs. westeurope is a good default if you're in or near Europe.
Cost considerations
Estimate costs using the Azure Pricing Calculator. Primary cost drivers:
- Azure Functions – Consumption or Flex tiers (invocations, memory/time)
- Storage Account – capacity and transactions
Tip: enable cost alerts in your subscription and test workloads in a sandbox subscription before production.
Security
This project uses a User-Assigned Managed Identity for authentication between the Azure resources.
The Function App is assigned the following RBAC roles:
- Storage Blob Data Owner
- Application Insights Monitoring Metrics Publisher
When using in Production environment, the following is strongly recommended:
- Restrict inbound traffic with Private endpoints + VNet integration
- Use service endpoints + firewall rules where applicable
Contributing
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request