boris-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| guideA | What you can do here, and what to do next — the front door to self-awareness. Derived entirely from the live tool registry (gate.TOOL_TIERS / gate.REGISTRATIONS), so it can never describe a tool the gate would refuse, or leave out one it would allow. whoami() answers "who am I"; this answers "what can I do, and what's my next step." The one caller who reaches every circle additionally gets a live operational runbook — pending access requests with copyable grant() calls, a shenanigans signal, private- corpus content health, and the publish/deploy checklist. Tier: public. |
| send_messageA | Leave a message for the owner. Pull-based, like whats_new(): there is no push, the owner reads this via inbox() on their own schedule, and any reply shows up in my_messages() the next time you poll it.
Tier: headhunter. |
| my_messagesA | Replies addressed to you, oldest-first within a page. Poll this at the start of a session, the same way whats_new() polls the event log — if the owner answered a message you sent, it shows up here, never pushed.
Tier: headhunter. |
| inboxA | Every inbound message, oldest-first within a page. This is the owner's read of the mailbox strangers' agents write into with send_message() — cursored the same way whats_new() and access_requests() are.
Tier: owner. |
| replyA | Answer a message. Consent-carrying, like grant(): there is no queue or draft state — calling this IS the send, because the caller has already been proven to be the owner by the gate.
Tier: owner. |
| access_requestsA | Who has asked for access and what happened to them. Every authenticated subject the server has never seen before gets one line here, once,
the first time it calls anything.
Tier: owner. |
| activityA | The shenanigans log: every denied tool call, and every access decision you made. This is the signal that somebody is probing the edges — a caller repeatedly asking for things above their circle shows up here as a run of denials with their subject on it. Nothing is redacted; the denial the caller received was deliberately vaguer than the line written here.
Tier: owner. |
| grantA | Assign a subject to a circle. Consent-carrying: calling this IS the approval.
Tier: owner. |
| revokeA | Remove a subject's circle assignment. Consent-carrying: calling this IS the approval. The subject does not become unknown again — their request line stays in the log, and they fall back to whatever an unmapped authenticated caller gets. Revoking somebody who was never assigned is a no-op that still records the intent. Tier: owner. |
| aboutA | Who Boris is and what he builds. Start here. Tier: public. |
| whoamiA | Who this server thinks you are, and what that gets you. Returns the subject your token carries — or "anonymous", which covers both a local
stdio session and an authenticated HTTP call whose token simply carries no subject
claim — the circle you resolved to, and whether an access request is on file for you.
Tier: public. |
| projectsA | Systems Boris has built. Each entry says what it is and — more usefully — what is architecturally notable about it. Set include_private=False for public repos only. Tier: public. |
| design_decisionsA | How Boris actually decided things, and why — an ADR corpus rather than a resume. Call with no topic to list them all; pass a topic key for one. Topics: dumb-evaluator, circuit-breakers-in-code, autonomy-tiers, structural-not-promised, containment-by-subtraction, state-in-files, receipt-is-not-outcome, value-not-quantity. Tier: public. |
| doctrineA | The personal-ops doctrine: rules for running your life or your agents out of files
without threads dying quietly. Each rule carries why it exists and what a linter would
check. Call with no argument for all. This is the rule set ops-lint's Tier: public. |
| stackC | Languages, architectural patterns, and engineering discipline — the checkable kind. Tier: public. |
| contactB | How to reach Boris. Tier: public. |
| whats_newA | What Boris has shipped or published, oldest-first within a page. THIS IS THE SUBSCRIBE-EQUIVALENT: call it once when a session starts, and again whenever you want to catch up. It is a forward log, not a "most recent N" snapshot.
There is deliberately no push/subscribe mechanism — see the Tier: public. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| about_resource | Identity and orientation, as a resource. |
| events_resource | The published event log, as a resource. Exposed as a resource on purpose: it is the natural subscription target if and when clients implement `subscriptions/listen` (2026-07-28 spec) against it. Today no client that matters does, so `whats_new()` is the real interface — but a resource costs nothing and means the day support lands, this server is already shaped for it. |
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/devenv/boris-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server