Model Context Protocol
Point an agent at this site.
Everything here is reachable over one endpoint:
https://malipetek.dev/mcp — streamable HTTP, protocol
2025-06-18. The knowledgebase tools are open to anyone. The portal tools work for a client
with an agent key they mint in the portal — they see exactly their own account.
Connect, per client
One URL serves everything: https://malipetek.dev/mcp — streamable HTTP, protocol
2025-06-18. Discovery is also published at
/.well-known/mcp-server.json.
ChatGPT
ChatGPT builds apps on MCP connectors now, not Custom GPT Actions. Turn on Settings → Connectors → Advanced → Developer mode, then add a connector:
Name: malipetek.dev
URL: https://malipetek.dev/mcp
Auth: No authentication # the public tools
Bearer cat_… # a client's agent key (portal → Connect an assistant) Claude, Cursor, anything else
Same URL. Claude: Settings → Connectors → Add custom connector. Cursor, in
mcp.json:
{ "mcpServers": { "malipetek": { "url": "https://malipetek.dev/mcp" } } } No client at all
curl -s https://malipetek.dev/mcp -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' Onboarding: what an agent needs, and what it does not
Reading needs nothing. search_knowledge,
get_knowledge, list_knowledge, every kb://entry/… resource
and the whole REST API are open — no key, no sign-up, no handshake.
Writing needs a key we mint, and that is the point: open to read, authored only by us. There is deliberately no self-serve route.
- The owner signs in at /portal and opens /kb/new.
- Mint a key named after the agent that will hold it (
claude-code,cursor…). - The agent sends it as
Authorization: Bearer ack_…. Stored only as a SHA-256 hash, shown once. - Every use updates
last_used_at; revoking is one click, so a leaked key is visible and short-lived.
The portal tools are a third tier: the client's own agent key (cat_…), which they mint
and revoke in the portal. It sees exactly their own account — the same routes the browser uses.
WebMCP: the same capabilities, inside the page
A backend MCP server is something the agent's platform reaches. WebMCP
(document.modelContext) is the other direction: the page registers tools that reuse its
own code and keep the visible UI in sync with what the agent just did.
This site registers three, feature-detected — a browser without the API loads the module and does nothing at all:
-
search_knowledge(query, status?)— returns entries, and updates the visible results when the visitor is on /kb. open_knowledge_entry(slug)— opens the entry in the visitor's own browser.-
open_intercom()— scrolls to the intercom and focuses the bell. Registered only on pages that have one, because tools should match the page state.
Three, not thirty: every registered tool spends context window and invites tool confusion, which is the failure mode the spec itself warns about.
Knowledgebase tools
-
search_knowledgepublic Full-text search over every entry. Prefix matching, so `migra` finds `migration`. -
get_knowledgepublic One entry in full — problem and solution markdown — by id or slug. -
list_knowledgepublic Newest entries first, without bodies. -
create_knowledgeack_ key Record a problem/solution pair from a session. -
update_knowledgeack_ key Patch an entry this key authored.
Mint an ack_ key at /kb/new (owner only) and pass it as
Authorization: Bearer ack_…. Keys are stored hashed and can be revoked there.
Client portal tools
The portal is where clients file requests and watch them get done. An agent with a
client's key can do the same: file, reply, set a budget, withdraw — every one still waits for Ali
before work starts. Client sites are hosted on malipetek.online; a change lands on the
preview first and only goes live when it is published.
-
portal_projects / portal_requests / portal_requestclient key The account's projects and requests, with status and cost. -
portal_file_requestclient key File a request for Ali — nothing starts until he reads it. -
portal_replyclient key Add a message to a request's conversation. -
portal_set_budgetclient key Raise, lower or remove a request's budget. -
portal_withdrawclient key Take back a request Ali has not approved yet.
A client mints a cat_ key in the portal under Connect an assistant and passes it
as Authorization: Bearer cat_…, or connects over the OAuth flow (ChatGPT does this itself).
Resources and prompts
Tools are for calling; resources are for attaching. Every entry is also a resource at
kb://entry/<slug> (text/markdown), so a client can pin the relevant entry
into context instead of asking the model to fetch it. resources/list pages at 50 with a
cursor, and kb://entry/{slug} is advertised as a template.
One prompt, record_learning, takes a topic and an outcome and returns the
instructions for turning the session that just ended into an entry — search first so it updates rather
than duplicates, and pick the status honestly.
Every tool carries MCP annotations, so a connector can tell reading from writing before it asks:
readOnlyHint is true for search, listing and every portal read.
No MCP? Use the REST API.
curl https://malipetek.dev/kb/entries?q=fts5
curl https://malipetek.dev/kb/<slug>.json
curl -X POST https://malipetek.dev/api/kb/entries -H "authorization: Bearer ack_…" \
-H 'content-type: application/json' \
-d '{"title":"…","problem":"…","solution":"…","status":"solved","author_agent":"…"}' /kb is the same data in a browser. /llms.txt is the
machine-readable summary of the whole site.