{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_k9dmm7ggnwkt","handle":"mrlesmithjr-mcp-common","url":"https://wellknown.network/agents/mrlesmithjr-mcp-common","links":{"self":"https://wellknown.network/agents/mrlesmithjr-mcp-common/record.json","html":"https://wellknown.network/agents/mrlesmithjr-mcp-common","markdown":"https://wellknown.network/agents/mrlesmithjr-mcp-common/record.md","api":"https://wellknown.network/api/v1/agents/mrlesmithjr-mcp-common","status":"https://wellknown.network/api/v1/agents/mrlesmithjr-mcp-common/status","claim":"https://wellknown.network/agents/mrlesmithjr-mcp-common/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mrlesmithjr-mcp-common/claim.json","badge":"https://wellknown.network/agents/mrlesmithjr-mcp-common/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mrlesmithjr-mcp-common/history","tools":"https://wellknown.network/api/v1/agents/mrlesmithjr-mcp-common/tools"},"ard":{"identifier":"urn:air::server:mrlesmithjr-mcp-common","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mrlesmithjr-mcp-common","summary":"Shared utilities for mrlesmithjr MCP servers: logging, config, paths, errors","description":"# mrlesmithjr-mcp-common\n\nShared building blocks for [FastMCP](https://github.com/jlowin/fastmcp) servers: stderr-safe logging, layered configuration, XDG path resolution, and a consistent JSON error envelope. It is the common foundation under the [mrlesmithjr/mcp](https://github.com/mrlesmithjr/mcp) tool suite, but has no dependency on those tools and is usable in any MCP server.\n\nImport as `mcp_common`.\n\n## Install\n\n```bash\npip install mrlesmithjr-mcp-common\n# or\nuv add mrlesmithjr-mcp-common\n```\n\n## Usage\n\n```python\nimport json\nfrom mcp_common.server import build_server, run_stdio\nfrom mcp_common.errors import safe_tool\n\nmcp = build_server(\"my-tool\", instructions=\"What this server does.\")\n\n@mcp.tool()\n@safe_tool\ndef do_thing(x: str) -> str:\n    return json.dumps({\"status\": \"ok\", \"data\": x})\n\ndef main() -> None:\n    run_stdio(mcp)\n```\n\n`safe_tool` wraps a tool so unhandled exceptions return a structured `{\"error\": ...}` envelope instead of crashing the server. `build_server` and `run_stdio` handle FastMCP setup and stdio transport; `configure_logging()` forces logs to stderr (stdout is reserved for the protocol).\n\n## Modules\n\n| Module | Purpose |\n|--------|---------|\n| `mcp_common.logging` | `configure_logging()` forcing stderr output (required for stdio transport) |\n| `mcp_common.server` | `build_server(name, instructions)` and `run_stdio(mcp)` |\n| `mcp_common.config` | `load_layered_config(tool_name, env_map)`: env vars > config.json > .env fallback |\n| `mcp_common.paths` | `config_dir()`, `config_file()`, `data_dir()` XDG path resolvers |\n| `mcp_common.errors` | `tool_error()`, `error_json()`, `safe_tool` decorator |\n| `mcp_common.coordinator_events` | `emit_coordinator_event(source, event_type, payload) -> bool`: self-healing write onto homeops-coordinator's `events.db` bus. Never raises; returns `False` on failure so callers can fire-and-forget it after a state change. |\n| `mcp_common.google_oauth` | `GoogleOAuthClient`: shared Google OAuth2 base class (toke…","publisher":null,"homepage":"https://github.com/mrlesmithjr/mcp","repository":"https://github.com/mrlesmithjr/mcp/issues","version":"0.1.2","license":null,"protocols":["mcp"],"tags":["mcp","claude","ai"],"pricing":null,"endpoints":[{"url":"pypi:mrlesmithjr-mcp-common","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[],"categories":[],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"mrlesmithjr-mcp-common","registry":"pypi","observedAt":"2026-10-28T16:27:21.921Z","publishedAt":"2026-07-08T21:33:39.564469Z","latestVersion":"0.1.2"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mrlesmithjr-mcp-common","url":"https://pypi.org/project/mrlesmithjr-mcp-common/","firstSeenAt":"2026-09-10T06:23:54.795Z","fetchedAt":"2026-10-28T16:25:32.327Z","normalizedAt":"2026-10-28T16:25:32.327Z"}]},"firstSeenAt":"2026-09-10T06:23:54.795Z","updatedAt":"2026-10-28T16:27:21.921Z"}