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 control-plane tools
belong to the owner and are gated twice (our admin session, then the platform's own sign-in).
Add it as a ChatGPT app
ChatGPT now builds apps on MCP connectors rather than Custom GPT Actions. In ChatGPT: Settings → Connectors → Advanced → Developer mode, then add a connector with:
Name: malipetek.dev
URL: https://malipetek.dev/mcp
Auth: No authentication (public tools only)
For the owner-only tools, use Authorization: Bearer <portal-session> — the same
token the client portal keeps in localStorage after sign-in.
Claude, Cursor, and other MCP clients take the same URL; the transport is standard.
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.
GPTflare control-plane tools
The GPTflare control plane creates and edits Astro + Keystatic sites: draft → provision → preview → approve → production. Those operations used to be reachable only from a Custom GPT through its Actions schema; they are now MCP tools, with the platform key held as a Worker secret instead of living in a GPT configuration.
-
platform_statusowner Control-plane reachability and platform-key health. -
platform_start_authowner Email the owner a magic link; returns the authRequestId every later call needs. -
platform_auth_statusowner Poll the sign-in until it is verified. -
platform_list_sitesowner Every site with status, urls and worker names. -
platform_site_state / _status / _preview_statusowner Git state, deploy status, preview build status. -
platform_list_files / platform_read_fileowner Inspect a site repo before editing it. -
platform_edit_previewowner Write files to the preview branch — preview-first, never straight to production. -
platform_approve_previewowner Promote a reviewed preview. The human-approval gate. -
platform_create_site / platform_provision_siteowner Draft a site from a brief, then turn it into a repo and a build project. -
platform_operation_statusowner Poll long-running operations with their user-safe envelope.
Control-plane calls need a per-conversation sign-in: run platform_start_auth, have the
owner open the emailed link, then pass the returned authRequestId to every later call.
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 control-plane read, and
destructiveHint is set on approving a preview or resetting one.
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-intercom.malipetek.workers.dev/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.