Search / online.projectstate/projectstate
projectstate
R0· no sign-inPer-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402.
v0.3.0 · active · repository · website · descriptor JSON · versions
Search / online.projectstate/projectstate
R0· no sign-inPer-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402.
v0.3.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"projectstate": {
"type": "http",
"url": "https://projectstate.online/mcp"
}
}
}claude mcp add --transport http projectstate https://projectstate.online/mcp[mcp_servers.projectstate]
url = "https://projectstate.online/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"projectstate": {
"type": "remote",
"url": "https://projectstate.online/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"projectstate": {
"type": "http",
"url": "https://projectstate.online/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=projectstate&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vcHJvamVjdHN0YXRlLm9ubGluZS9tY3AifQ%3D%3D"
}{
"servers": {
"projectstate": {
"type": "http",
"url": "https://projectstate.online/mcp"
}
}
}{
"mcpServers": {
"projectstate": {
"httpUrl": "https://projectstate.online/mcp"
}
}
}extensions:
"projectstate":
enabled: true
name: "projectstate"
type: streamable_http
uri: "https://projectstate.online/mcp"
timeout: 300
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every useauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky onestools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: project_status (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); remember (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); recall (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …tools.token_costabout 1,406 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changesno tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +dns-namespace +website +reachable +uptime-99% ~updated-38d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://projectstate.online/mcp streamable-http | none | yes | 99% | 299 ms | 2026-07-28 | 2026-10-20 |
plan_check | Before you start something non-trivial, say what you are about to do and get back only what would change your mind: attempts that already failed at this, decisions that are still in force and constrain it, and open tasks that overlap. `intent` is one line in plain words, e.g. 'switch the cache to Redis' or 'rewrite the auth middleware to use refresh tokens'. Pass `files` if you know which paths you will touch; entries about those files are included even when the wording differs. Cheaper than repeating work that already failed once. |
project_open | Open (or create) a project and get a compact brief: status line, open tasks, latest active decisions and failed attempts. Call this first in a session. Omit `project` to list your projects. `project` is a slug like 'my-app' (lowercase, digits, '-', '_' or '.'). |
project_status | Get the project's one-line status, open tasks and last change. Pass `set_status` to overwrite the status line (e.g. 'v0.3 shipped; next: migrate auth to OAuth'). Cheap; use it for handoff notes between sessions. |
recall | Search the project's memory with keywords and get the few most relevant entries (ranked, active entries first, superseded ones last), trimmed to `max_chars`. Use 2-5 specific keywords (e.g. 'auth token expiry'). Filters: kind (decision|attempt|task|note), status, tags, files. Omit `query` for the most recent entries. Follow up with update(project, id, ...) or remember(...). |
remember | Store one fact about the project. `kind` is one of: decision (what was chosen and why), attempt (something tried; status 'worked'|'failed'|'partial'), task (status 'open'|'done'|'dropped'), note (anything else). `title` is one line; put details, reasons and error messages in `body`. `files` lists related paths. `supersedes` marks an older decision/task as replaced by this one. Identical content is stored once, so retries are safe; `idempotency_key` additionally guarantees a retry is not billed twice. |
update | Change an existing entry by id: set `status` (task open|done|dropped, attempt worked|failed|partial, decision active|superseded|reverted, note active|archived), replace `title`/`body`, `append` a line to the body (e.g. an outcome), replace `tags`/`files`, or `delete` it. |
Schemas: list_tools.
{
"name": "online.projectstate/projectstate",
"title": "projectstate",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://projectstate.online/mcp",
"type": "streamable-http"
}
],
"version": "0.3.0",
"repository": {
"url": "https://github.com/ErikKerkvliet/projectstate",
"source": "github"
},
"websiteUrl": "https://projectstate.online",
"description": "Per-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402."
}