Permissioned MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Permissioned MCP Serverlist my notes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Permissioned MCP Server
A compact Model Context Protocol server that demonstrates the parts usually missing from quickstarts: explicit tool boundaries, least-privilege discovery, execution-time authorization, destructive-action confirmation, and metadata-only audit logs.
The domain is deliberately boring: a local note store. The reference is about designing a safe boundary between an AI agent and real side effects.
What it demonstrates
JavaScript on Node.js with the official MCP SDK v2
Narrow read, write, and destructive tools
Separate
notes:read,notes:write, andnotes:adminscopesUnauthorized tools omitted from
tools/listand rejected again at executionIdentifier-bound confirmation for destructive actions
Structured tool results and MCP behavior annotations
Audit events that never log arguments, content, or credentials
Atomic local persistence with restrictive file permissions
Tests for policy, handlers, persistence, and failure cases
Related MCP server: mcp-shell-server-example
Run it
Requires Node.js twenty or newer.
npm install
cp .env.example .env
MCP_SCOPES=notes:read,notes:write npm startExample client configuration:
{
"mcpServers": {
"permissioned-notes": {
"command": "node",
"args": ["/absolute/path/to/permissioned-mcp-server/src/server.js"],
"env": {
"MCP_SCOPES": "notes:read,notes:write",
"MCP_DATA_FILE": "/absolute/path/to/notes.json",
"MCP_ACTOR": "local-agent"
}
}
}
}Start read-only. Grant notes:write only when mutation is necessary. Keep notes:admin out of the default configuration.
Tool boundary
Tool | Scope | Side effect |
|
| Returns metadata only |
|
| Reads one note |
|
| Creates one note |
|
| Permanently deletes one note |
See the decision record for the reasoning behind discovery filtering, double authorization, confirmation design, audit redaction, transport choice, and storage isolation.
Verify it
npm run check
npm testThe test suite never starts a model or calls a paid API.
Production notes
This is a local stdio reference, not a turnkey hosted authorization server. Before exposing an MCP server over Streamable HTTP, add OAuth-based authorization, token audience validation, HTTPS, rate limits, tenant isolation, durable audit storage, and client-specific consent.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sn0bored/permissioned-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server