Search / io.github.swisspra/pursers
Pursers
L0· runs locallyCoordinate AI-agent work on a local-first, owner-controlled MCP board
v5.2.1 · active · repository · descriptor JSON · versions
Search / io.github.swisspra/pursers
L0· runs locallyCoordinate AI-agent work on a local-first, owner-controlled MCP board
v5.2.1 · active · repository · descriptor JSON · versions
{
"mcpServers": {
"pursers": {
"command": "uvx",
"args": [
"pursers-central==0.1.8",
"--data-root"
],
"env": {
"ONBOARD_CENTRAL_HOST": "127.0.0.1",
"ONBOARD_CENTRAL_PORT": "8766",
"ONBOARD_CENTRAL_LOG_LEVEL": "info",
"ONBOARD_CENTRAL_TLS_KEYFILE": "${ONBOARD_CENTRAL_TLS_KEYFILE}",
"CENTRAL_JWKS_PATH": "${CENTRAL_JWKS_PATH}",
"CENTRAL_JWT_CLOCK_SKEW": "30",
"CENTRAL_JWT_ISSUER": "${CENTRAL_JWT_ISSUER}",
"CENTRAL_PRINCIPAL_STREAM_CAP": "32",
"CENTRAL_REAPER_INTERVAL_S": "30.0",
"CENTRAL_REQUEST_STATE_KEY_FILE": "${CENTRAL_REQUEST_STATE_KEY_FILE}",
"PURSERS_LEGACY_TOOLS": "0"
}
}
}
}claude mcp add pursers -e "ONBOARD_CENTRAL_HOST=127.0.0.1" -e "ONBOARD_CENTRAL_PORT=8766" -e "ONBOARD_CENTRAL_LOG_LEVEL=info" -e "ONBOARD_CENTRAL_TLS_KEYFILE=${ONBOARD_CENTRAL_TLS_KEYFILE}" -e "CENTRAL_JWKS_PATH=${CENTRAL_JWKS_PATH}" -e "CENTRAL_JWT_CLOCK_SKEW=30" -e "CENTRAL_JWT_ISSUER=${CENTRAL_JWT_ISSUER}" -e "CENTRAL_PRINCIPAL_STREAM_CAP=32" -e "CENTRAL_REAPER_INTERVAL_S=30.0" -e "CENTRAL_REQUEST_STATE_KEY_FILE=${CENTRAL_REQUEST_STATE_KEY_FILE}" -e "PURSERS_LEGACY_TOOLS=0" -- uvx pursers-central==0.1.8 --data-root[mcp_servers.pursers]
command = "uvx"
args = ["pursers-central==0.1.8", "--data-root"]
env = { "ONBOARD_CENTRAL_HOST" = "127.0.0.1", "ONBOARD_CENTRAL_PORT" = "8766", "ONBOARD_CENTRAL_LOG_LEVEL" = "info", "ONBOARD_CENTRAL_TLS_KEYFILE" = "${ONBOARD_CENTRAL_TLS_KEYFILE}", "CENTRAL_JWKS_PATH" = "${CENTRAL_JWKS_PATH}", "CENTRAL_JWT_CLOCK_SKEW" = "30", "CENTRAL_JWT_ISSUER" = "${CENTRAL_JWT_ISSUER}", "CENTRAL_PRINCIPAL_STREAM_CAP" = "32", "CENTRAL_REAPER_INTERVAL_S" = "30.0", "CENTRAL_REQUEST_STATE_KEY_FILE" = "${CENTRAL_REQUEST_STATE_KEY_FILE}", "PURSERS_LEGACY_TOOLS" = "0" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"pursers": {
"type": "local",
"command": [
"uvx",
"pursers-central==0.1.8",
"--data-root"
],
"enabled": true,
"environment": {
"ONBOARD_CENTRAL_HOST": "127.0.0.1",
"ONBOARD_CENTRAL_PORT": "8766",
"ONBOARD_CENTRAL_LOG_LEVEL": "info",
"ONBOARD_CENTRAL_TLS_KEYFILE": "{env:ONBOARD_CENTRAL_TLS_KEYFILE}",
"CENTRAL_JWKS_PATH": "{env:CENTRAL_JWKS_PATH}",
"CENTRAL_JWT_CLOCK_SKEW": "30",
"CENTRAL_JWT_ISSUER": "{env:CENTRAL_JWT_ISSUER}",
"CENTRAL_PRINCIPAL_STREAM_CAP": "32",
"CENTRAL_REAPER_INTERVAL_S": "30.0",
"CENTRAL_REQUEST_STATE_KEY_FILE": "{env:CENTRAL_REQUEST_STATE_KEY_FILE}",
"PURSERS_LEGACY_TOOLS": "0"
}
}
}
}{
"mcpServers": {
"pursers": {
"command": "uvx",
"args": [
"pursers-central==0.1.8",
"--data-root"
],
"env": {
"ONBOARD_CENTRAL_HOST": "127.0.0.1",
"ONBOARD_CENTRAL_PORT": "8766",
"ONBOARD_CENTRAL_LOG_LEVEL": "info",
"ONBOARD_CENTRAL_TLS_KEYFILE": "${ONBOARD_CENTRAL_TLS_KEYFILE}",
"CENTRAL_JWKS_PATH": "${CENTRAL_JWKS_PATH}",
"CENTRAL_JWT_CLOCK_SKEW": "30",
"CENTRAL_JWT_ISSUER": "${CENTRAL_JWT_ISSUER}",
"CENTRAL_PRINCIPAL_STREAM_CAP": "32",
"CENTRAL_REAPER_INTERVAL_S": "30.0",
"CENTRAL_REQUEST_STATE_KEY_FILE": "${CENTRAL_REQUEST_STATE_KEY_FILE}",
"PURSERS_LEGACY_TOOLS": "0"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=pursers&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJwdXJzZXJzLWNlbnRyYWw9PTAuMS44IiwiLS1kYXRhLXJvb3QiXSwiZW52Ijp7Ik9OQk9BUkRfQ0VOVFJBTF9IT1NUIjoiMTI3LjAuMC4xIiwiT05CT0FSRF9DRU5UUkFMX1BPUlQiOiI4NzY2IiwiT05CT0FSRF9DRU5UUkFMX0xPR19MRVZFTCI6ImluZm8iLCJPTkJPQVJEX0NFTlRSQUxfVExTX0tFWUZJTEUiOiIke09OQk9BUkRfQ0VOVFJBTF9UTFNfS0VZRklMRX0iLCJDRU5UUkFMX0pXS1NfUEFUSCI6IiR7Q0VOVFJBTF9KV0tTX1BBVEh9IiwiQ0VOVFJBTF9KV1RfQ0xPQ0tfU0tFVyI6IjMwIiwiQ0VOVFJBTF9KV1RfSVNTVUVSIjoiJHtDRU5UUkFMX0pXVF9JU1NVRVJ9IiwiQ0VOVFJBTF9QUklOQ0lQQUxfU1RSRUFNX0NBUCI6IjMyIiwiQ0VOVFJBTF9SRUFQRVJfSU5URVJWQUxfUyI6IjMwLjAiLCJDRU5UUkFMX1JFUVVFU1RfU1RBVEVfS0VZX0ZJTEUiOiIke0NFTlRSQUxfUkVRVUVTVF9TVEFURV9LRVlfRklMRX0iLCJQVVJTRVJTX0xFR0FDWV9UT09MUyI6IjAifX0%3D"
}{
"servers": {
"pursers": {
"type": "stdio",
"command": "uvx",
"args": [
"pursers-central==0.1.8",
"--data-root"
],
"env": {
"ONBOARD_CENTRAL_HOST": "127.0.0.1",
"ONBOARD_CENTRAL_PORT": "8766",
"ONBOARD_CENTRAL_LOG_LEVEL": "info",
"ONBOARD_CENTRAL_TLS_KEYFILE": "${ONBOARD_CENTRAL_TLS_KEYFILE}",
"CENTRAL_JWKS_PATH": "${CENTRAL_JWKS_PATH}",
"CENTRAL_JWT_CLOCK_SKEW": "30",
"CENTRAL_JWT_ISSUER": "${CENTRAL_JWT_ISSUER}",
"CENTRAL_PRINCIPAL_STREAM_CAP": "32",
"CENTRAL_REAPER_INTERVAL_S": "30.0",
"CENTRAL_REQUEST_STATE_KEY_FILE": "${CENTRAL_REQUEST_STATE_KEY_FILE}",
"PURSERS_LEGACY_TOOLS": "0"
}
}
}
}{
"mcpServers": {
"pursers": {
"command": "uvx",
"args": [
"pursers-central==0.1.8",
"--data-root"
],
"env": {
"ONBOARD_CENTRAL_HOST": "127.0.0.1",
"ONBOARD_CENTRAL_PORT": "8766",
"ONBOARD_CENTRAL_LOG_LEVEL": "info",
"ONBOARD_CENTRAL_TLS_KEYFILE": "${ONBOARD_CENTRAL_TLS_KEYFILE}",
"CENTRAL_JWKS_PATH": "${CENTRAL_JWKS_PATH}",
"CENTRAL_JWT_CLOCK_SKEW": "30",
"CENTRAL_JWT_ISSUER": "${CENTRAL_JWT_ISSUER}",
"CENTRAL_PRINCIPAL_STREAM_CAP": "32",
"CENTRAL_REAPER_INTERVAL_S": "30.0",
"CENTRAL_REQUEST_STATE_KEY_FILE": "${CENTRAL_REQUEST_STATE_KEY_FILE}",
"PURSERS_LEGACY_TOOLS": "0"
}
}
}
}extensions:
"pursers":
enabled: true
name: "pursers"
type: stdio
cmd: "uvx"
args:
- "pursers-central==0.1.8"
- "--data-root"
envs:
"ONBOARD_CENTRAL_HOST": "127.0.0.1"
"ONBOARD_CENTRAL_PORT": "8766"
"ONBOARD_CENTRAL_LOG_LEVEL": "info"
"ONBOARD_CENTRAL_TLS_KEYFILE": "${ONBOARD_CENTRAL_TLS_KEYFILE}"
"CENTRAL_JWKS_PATH": "${CENTRAL_JWKS_PATH}"
"CENTRAL_JWT_CLOCK_SKEW": "30"
"CENTRAL_JWT_ISSUER": "${CENTRAL_JWT_ISSUER}"
"CENTRAL_PRINCIPAL_STREAM_CAP": "32"
"CENTRAL_REAPER_INTERVAL_S": "30.0"
"CENTRAL_REQUEST_STATE_KEY_FILE": "${CENTRAL_REQUEST_STATE_KEY_FILE}"
"PURSERS_LEGACY_TOOLS": "0"
timeout: 300
Placeholders to fill from your own secret store: ${ONBOARD_CENTRAL_TLS_KEYFILE}, ${CENTRAL_REQUEST_STATE_KEY_FILE}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected], [email protected]No 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 +namespace-matches-repo ~liveness-unmeasured +updated-14d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
[email protected] PyPIthis version is not known to the dependency resolver
[email protected] PyPIthis version is not known to the dependency resolver
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
pursers-central | pypi | 0.1.8 | uvx | ONBOARD_CENTRAL_TLS_KEYFILE, CENTRAL_REQUEST_STATE_KEY_FILE |
pursers-client | pypi | 0.1.9 | uvx |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.swisspra/pursers",
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"releaseNote": "Release-train bumps keep the product, central, and client versions in sync with tools/release_versions.toml; tools/check_server_json.py fails on drift.",
"versionSource": "tools/release_versions.toml"
}
},
"title": "Pursers",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "5.2.1",
"packages": [
{
"version": "0.1.8",
"transport": {
"url": "http://127.0.0.1:8766/mcp",
"type": "streamable-http"
},
"identifier": "pursers-central",
"runtimeHint": "uvx",
"registryType": "pypi",
"packageArguments": [
{
"name": "--data-root",
"type": "named",
"format": "filepath",
"isRequired": true,
"description": "Private directory for the Central SQLite store and request-state keys"
}
],
"environmentVariables": [
{
"name": "ONBOARD_CENTRAL_HOST",
"default": "127.0.0.1",
"description": "Loopback bind host used by the packaged runtime"
},
{
"name": "ONBOARD_CENTRAL_PORT",
"format": "number",
"default": "8766",
"description": "Loopback bind port used by the packaged runtime"
},
{
"name": "ONBOARD_CENTRAL_DATA_DIR",
"format": "filepath",
"description": "Private Central data directory; --data-dir/--data-root is the equivalent CLI input"
},
{
"name": "ONBOARD_CENTRAL_LOG_LEVEL",
"default": "info",
"description": "Packaged runtime log level"
},
{
"name": "ONBOARD_CENTRAL_ALLOWED_HOSTS",
"description": "Optional comma-separated bare Host names accepted in addition to the bind host"
},
{
"name": "ONBOARD_CENTRAL_TLS_CERTFILE",
"format": "filepath",
"description": "Optional TLS certificate path; requires ONBOARD_CENTRAL_TLS_KEYFILE"
},
{
"name": "ONBOARD_CENTRAL_TLS_KEYFILE",
"format": "filepath",
"isSecret": true,
"description": "Optional TLS private-key path; requires ONBOARD_CENTRAL_TLS_CERTFILE"
},
{
"name": "CENTRAL_ADMISSION",
"value": "invite",
"description": "Central admission policy; Pursers supports invite-only admission"
},
{
"name": "CENTRAL_AUTH_MODE",
"value": "jwt",
"description": "Central authentication mode; Pursers supports JWT authentication"
},
{
"name": "CENTRAL_JWKS_PATH",
"format": "filepath",
"isRequired": true,
"description": "Path to the issuer public JWKS used to verify seat credentials"
},
{
"name": "CENTRAL_JWT_AUDIENCE",
"description": "MCP resource URL in audience and resource claims; defaults to the loopback bind URL"
},
{
"name": "CENTRAL_JWT_CLOCK_SKEW",
"format": "number",
"default": "30",
"description": "Allowed JWT clock skew in seconds"
},
{
"name": "CENTRAL_JWT_ISSUER",
"isRequired": true,
"description": "Exact issuer URL in every accepted seat credential"
},
{
"name": "CENTRAL_PRINCIPAL_STREAM_CAP",
"format": "number",
"default": "32",
"description": "Maximum concurrent event streams accepted per principal"
},
{
"name": "CENTRAL_REAPER_INTERVAL_S",
"format": "number",
"default": "30.0",
"description": "Interval in seconds between expired-lease reaper sweeps"
},
{
"name": "CENTRAL_REQUEST_STATE_KEY_FILE",
"format": "filepath",
"isSecret": true,
"description": "Optional restart-safe request-state keyring path"
},
{
"name": "PURSERS_LEGACY_TOOLS",
"format": "string",
"default": "0",
"description": "String flag: use 1 to expose deprecated coordination tools; use 0 to keep them hidden"
},
{
"name": "STORE_BACKEND",
"value": "sqlite",
"description": "Central storage backend; Pursers supports SQLite"
}
]
},
{
"version": "0.1.9",
"transport": {
"type": "stdio"
},
"identifier": "pursers-client",
"runtimeHint": "uvx",
"registryType": "pypi",
"packageArguments": [
{
"type": "positional",
"value": "pursers-mcp",
"description": "The stdio MCP relay console script"
},
{
"name": "--central-url",
"type": "named",
"valueHint": "central_url",
"isRequired": true,
"description": "URL of the Pursers Central MCP service"
},
{
"name": "--board",
"type": "named",
"valueHint": "board_id",
"isRequired": true,
"description": "Pursers board ID exposed through this relay"
},
{
"name": "--token-file",
"type": "named",
"format": "filepath",
"valueHint": "token_file",
"isRequired": true,
"description": "Path to the bearer-token file; token values are never accepted here"
},
{
"name": "--ca-file",
"type": "named",
"format": "filepath",
"valueHint": "ca_file",
"description": "Optional CA certificate file for the Central connection"
},
{
"name": "--tools",
"type": "named",
"choices": [
"default",
"worker",
"reviewer",
"all"
],
"default": "default",
"description": "Tool surface exposed by the relay"
}
],
"runtimeArguments": [
{
"name": "--from",
"type": "named",
"value": "pursers-client==0.1.9",
"description": "Install the release-manifest-pinned client package before running pursers-mcp"
}
]
}
],
"repository": {
"url": "https://github.com/swisspra/Pursers",
"source": "github"
},
"description": "Coordinate AI-agent work on a local-first, owner-controlled MCP board"
}