{"name":"online.projectstate/projectstate","slug":"projectstate","title":"projectstate","description":"Per-project memory for AI agents: decisions, attempts, tasks, ranked recall. Paid per call via x402.","url":"https://mcp.market/server/projectstate","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-12T12:37:47.000Z","license":"MIT"},"uptime":{"percent":100,"checks":5,"ok":5,"last_checked_at":"2026-09-20T18:55:48.975Z","last_ok_at":"2026-09-20T18:55:48.975Z","latency_ms":402},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/ErikKerkvliet/projectstate","website":"https://projectstate.online","version":"0.3.0","remotes":[{"type":"streamable-http","url":"https://projectstate.online/mcp"}],"packages":[],"tools":[{"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, decisions that are still in force and constrain\n        it, and open tasks that overlap. `intent` is one line in plain words, e.g. 'switch the cache to Redis'\n        or 'rewrite the auth middleware to use refresh tokens'. Pass `files` if you know which paths you will\n        touch; entries about those files are included even when the wording differs. Cheaper than repeating\n        work that already failed once.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"title":"Project","type":"string"},"intent":{"title":"Intent","type":"string"},"files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Files"},"limit":{"default":3,"title":"Limit","type":"integer"},"max_chars":{"default":1200,"title":"Max Chars","type":"integer"}},"required":["project","intent"],"title":"plan_checkArguments"}},{"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. Omit `project` to list your projects.\n        `project` is a slug like 'my-app' (lowercase, digits, '-', '_' or '.').","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Project"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"}},"title":"project_openArguments"}},{"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 OAuth'). Cheap; use it for handoff notes between sessions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"title":"Project","type":"string"},"set_status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Set Status"}},"required":["project"],"title":"project_statusArguments"}},{"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_chars`. Use 2-5 specific keywords (e.g. 'auth token expiry').\n        Filters: kind (decision|attempt|task|note), status, tags, files. Omit `query` for the most recent entries.\n        Follow up with update(project, id, ...) or remember(...).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"title":"Project","type":"string"},"query":{"default":"","title":"Query","type":"string"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Kind"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Status"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Tags"},"files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Files"},"limit":{"default":5,"title":"Limit","type":"integer"},"max_chars":{"default":1500,"title":"Max Chars","type":"integer"}},"required":["project"],"title":"recallArguments"}},{"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'), task (status 'open'|'done'|'dropped'), note (anything else).\n        `title` is one line; put details, reasons and error messages in `body`. `files` lists related paths.\n        `supersedes` marks an older decision/task as replaced by this one. Identical content is stored once, so\n        retries are safe; `idempotency_key` additionally guarantees a retry is not billed twice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"title":"Project","type":"string"},"kind":{"title":"Kind","type":"string"},"title":{"title":"Title","type":"string"},"body":{"default":"","title":"Body","type":"string"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Tags"},"files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Files"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Status"},"supersedes":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Supersedes"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Idempotency Key"}},"required":["project","kind","title"],"title":"rememberArguments"}},{"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|archived), replace `title`/`body`, `append` a line to the\n        body (e.g. an outcome), replace `tags`/`files`, or `delete` it.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"project":{"title":"Project","type":"string"},"id":{"title":"Id","type":"integer"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Status"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Body"},"append":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Append"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Tags"},"files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Files"},"delete":{"default":false,"title":"Delete","type":"boolean"}},"required":["project","id"],"title":"updateArguments"}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-19T20:07:53.264Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:07:53.212Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 730ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 7 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://projectstate.online/mcp","reachable":true,"authRequired":false,"latencyMs":730,"serverInfo":{"name":"projectstate","version":"0.3.0"}}],"packages":[],"repo":{"found":true,"owner":"ErikKerkvliet","repo":"projectstate","archived":false,"pushedAt":"2026-09-12T12:37:47Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/29604483?v=4","ownerCreatedAt":"2017-06-21T14:04:55Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/29604483?v=4&s=128","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-12T12:37:47.000Z","score":23}}}},"grade_history":[],"reviews":[]}