{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_mchvaxbgpt2d","handle":"projectstate","url":"https://wellknown.network/agents/projectstate","links":{"self":"https://wellknown.network/agents/projectstate/record.json","html":"https://wellknown.network/agents/projectstate","markdown":"https://wellknown.network/agents/projectstate/record.md","api":"https://wellknown.network/api/v1/agents/projectstate","status":"https://wellknown.network/api/v1/agents/projectstate/status","claim":"https://wellknown.network/agents/projectstate/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/projectstate/claim.json","badge":"https://wellknown.network/agents/projectstate/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/projectstate/history","tools":"https://wellknown.network/api/v1/agents/projectstate/tools"},"ard":{"identifier":"urn:air:projectstate.online:server:projectstate","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"projectstate","summary":"Per-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402.","description":"Per-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402.","publisher":{"name":"online.projectstate","url":null},"homepage":"https://projectstate.online","repository":"https://github.com/ErikKerkvliet/projectstate","version":"0.3.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://projectstate.online/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-12T12:38:01.86447Z","publishedAt":"2026-09-12T12:38:01.86447Z","registryName":"online.projectstate/projectstate"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.tasks","name":"Tasks & To-do","confidence":1,"provenance":"derived"},{"slug":"knowledge.memory","name":"Agent Memory","confidence":1,"provenance":"derived"},{"slug":"content.seo","name":"SEO","confidence":0.525,"provenance":"derived"}],"categories":["content","knowledge","productivity"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-09T23:29:29.039Z","lastProbedAt":"2026-10-09T23:29:29.039Z","statusComputedAt":"2026-10-09T23:31:10.614Z","reliability30d":{"probes":97,"successRate":1,"p50Ms":372,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":97,"ok":97,"authBoundaryOk":0,"serviceOk":97,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-09T23:29:29.039Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":369,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T16:32:44.162Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":369,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T09:27:58.825Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":354,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T03:24:23.192Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":341,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T21:24:02.619Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":346,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T15:24:24.244Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":455,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T09:24:20.505Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":346,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T03:23:45.503Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":364,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T20:30:19.550Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":407,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T13:26:00.378Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":370,"error":null,"detail":{"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"toolCount":6,"toolsHash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","serverName":"projectstate","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"0.3.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"project_open","description":"Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and\n        failed attempts. Call this first in a session. "},{"name":"project_status","description":"Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status\n        line (e.g. 'v0.3 shipped; next: migrate auth to"},{"name":"remember","description":"Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something\n        tried; status 'worked'|'failed'|'partial'), t"},{"name":"recall","description":"Search the project's memory with keywords and get the few most relevant entries (ranked, active entries\n        first, superseded ones last), trimmed to `max_ch"},{"name":"plan_check","description":"Before you start something non-trivial, say what you are about to do and get back only what would\n        change your mind: attempts that already failed at this"},{"name":"update","description":"Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial,\n        decision active|superseded|reverted, note active|ar"}],"package":null,"toolSurface":{"id":"ts_7y3m4569tzzp","endpointId":"ep_9rt3kby8hmmt","hash":"cb5cf240c5bd02bb9bcd4e74a656a5e5055b4468a1f8759b6e7ec51a83961f13","toolCount":6,"serverName":"projectstate","serverVersion":"0.3.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-13T12:28:33.954Z","lastSeenAt":"2026-10-09T23:29:29.032Z","observations":97,"toolNames":["project_open","project_status","remember","recall","plan_check","update"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_9rt3kby8hmmt","url":"https://projectstate.online/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-07T13:26:00.401Z","auth":{"observedAt":"2026-10-07T13:26:00.781Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-07T13:26:00.806Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"projectstate.online","issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validFrom":"2026-09-11T15:51:12.000Z","validTo":"2026-12-10T15:51:11.000Z","daysToExpiry":61,"sanCount":2,"fingerprint256":"E8:C8:F1:C3:DB:73:A6:36:F7:A3:45:0B:E8:DF:D4:74:32:D1:32:33:99:77:24:28:8D:51:07:93:6D:0C:D7:2E"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"online.projectstate/projectstate","url":"https://registry.modelcontextprotocol.io/v0/servers/online.projectstate%2Fprojectstate","firstSeenAt":"2026-09-13T11:21:23.835Z","fetchedAt":"2026-10-08T19:19:57.280Z","normalizedAt":"2026-10-08T19:19:57.280Z"}]},"firstSeenAt":"2026-09-13T11:21:23.835Z","updatedAt":"2026-10-09T23:31:57.088Z"}