{"name":"io.github.phasespace-labs/palinode","slug":"phasespace-labs-palinode","title":"Palinode","description":"Inspectable, correctable project memory in git-versioned Markdown for AI agents.","url":"https://mcp.market/server/phasespace-labs-palinode","rating":null,"grade":"C","score":66,"certified":false,"status":"active","category":"devtools","tags":["devtools"],"presence":{"score":47,"stars":40,"forks":44,"downloads_week":503,"last_push_at":"2026-09-18T16:44:21.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/phasespace-labs/palinode","website":"https://github.com/phasespace-labs/palinode","version":"0.21.0","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"palinode","version":"0.21.0","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"description":"Select the palinode distribution from PyPI","value":"palinode","type":"named","name":"--from"},{"description":"Console script for the stdio MCP server","value":"palinode-mcp","type":"positional","valueHint":"stdio entry point"}],"environmentVariables":[{"description":"Path to the markdown-memory directory (e.g. ~/.palinode). Created if missing.","isRequired":true,"name":"PALINODE_DIR"},{"description":"Host where the back-end palinode-api process is reachable","default":"127.0.0.1","name":"PALINODE_API_HOST"},{"description":"Port for palinode-api","default":"6340","name":"PALINODE_API_PORT"},{"description":"Optional bearer token enforced on every palinode-api request other than /health. Required when PALINODE_API_BIND_INTENT=public. Generate with: python -c 'import secrets; print(secrets.token_urlsafe(32))'.","isSecret":true,"name":"PALINODE_API_TOKEN"},{"description":"Path to a file containing the bearer token (alternative to PALINODE_API_TOKEN; for docker-secrets style deployments)","isSecret":true,"name":"PALINODE_API_TOKEN_FILE"}]},{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"palinode","version":"0.21.0","runtimeHint":"uvx","transport":{"type":"streamable-http","url":"http://127.0.0.1:6341/mcp/"},"packageArguments":[{"description":"Select the palinode distribution from PyPI","value":"palinode","type":"named","name":"--from"},{"description":"Console script for the long-running streamable-HTTP MCP server","value":"palinode-mcp-http","type":"positional","valueHint":"streamable-http entry point"}],"environmentVariables":[{"description":"Path to the markdown-memory directory","isRequired":true,"name":"PALINODE_DIR"},{"description":"Bind host for the MCP HTTP server. Defaults to loopback; set to 0.0.0.0 only with intentional network exposure (paired with PALINODE_API_BIND_INTENT=public on the back-end).","default":"127.0.0.1","name":"PALINODE_MCP_HTTP_HOST"},{"description":"Port for the MCP HTTP server","default":"6341","name":"PALINODE_MCP_HTTP_PORT"},{"description":"Host where the back-end palinode-api is reachable","default":"127.0.0.1","name":"PALINODE_API_HOST"},{"description":"Port for palinode-api","default":"6340","name":"PALINODE_API_PORT"},{"description":"Bearer token enforced by palinode-api. Required when binding non-loopback. Generate with: python -c 'import secrets; print(secrets.token_urlsafe(32))'.","isSecret":true,"name":"PALINODE_API_TOKEN"},{"description":"Path to a file containing the bearer token (alternative to PALINODE_API_TOKEN)","isSecret":true,"name":"PALINODE_API_TOKEN_FILE"}]}],"tools":[{"name":"palinode_entities","description":"List all known entities, or get memory files referencing a specific entity.","write_action":false,"price_micros":0,"input_schema":null},{"name":"palinode_ingest","description":"Fetch a URL and save it as a research reference in Palinode memory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"palinode_push","description":"Sync memory changes to GitHub for backup and cross-machine access.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":66,"grade":"C","scanned_at":"2026-09-19T21:08:32.583Z","report":{"scannerVersion":"0.1.8","scannedAt":"2026-09-19T21:08:32.556Z","components":{"code":{"score":15,"max":25,"notes":["184 source files scanned","184 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"exec.shell-true","severity":"medium","component":"code","title":"subprocess with shell=True","evidence":"palinode-0.21.0/palinode/core/git_tools.py: …form is used deliberately — never ``shell=True``, never string-interpolated commands …"},{"id":"exec.shell-true","severity":"medium","component":"code","title":"subprocess with shell=True","evidence":"palinode-0.21.0/palinode/core/git_tools.py: …form is used deliberately — never ``shell=True``, never string-interpolated commands …"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"palinode","version":"0.21.0","found":true,"weeklyDownloads":503,"license":"MIT","dependencyCount":20,"publishedAt":"2026-09-18T16:18:31.685267Z","repositoryUrl":"https://github.com/phasespace-labs/palinode"},{"registryType":"pypi","identifier":"palinode","version":"0.21.0","found":true,"license":"MIT","dependencyCount":20,"publishedAt":"2026-09-18T16:18:31.685267Z","repositoryUrl":"https://github.com/phasespace-labs/palinode"}],"repo":{"found":true,"owner":"phasespace-labs","repo":"palinode","archived":false,"pushedAt":"2026-09-18T16:44:21Z","stars":40,"forks":44,"openIssues":15,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/275561389?v=4","ownerCreatedAt":"2026-04-12T22:59:29Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":40,"forks":44,"downloadsWeek":503,"license":"MIT","lastPushAt":"2026-09-18T16:44:21.000Z","score":47}}}},"grade_history":[{"kind":"restore","fromGrade":"D","toGrade":"C","reason":"score 66: subprocess with shell=True; subprocess with shell=True","createdAt":"2026-09-19T21:08:33.313Z"}],"reviews":[]}