{
  "markdown": "# @sedis/mcp\n\n[![CI](https://github.com/sedis-ab/sedis-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/sedis-ab/sedis-mcp/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@sedis/mcp.svg)](https://www.npmjs.com/package/@sedis/mcp)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n[![Node.js >= 20](https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg)](https://nodejs.org)\n\nA [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that\nwraps the **Sedis PartnerAPI v2** as a small set of curated, **read-only** tools,\nso AI assistants and agents (Claude Desktop, Cursor, and any MCP-capable client)\ncan query your Sedis _Bolagsanalys_ (listed-company financials) and\n_Fastighetsbenchmark_ (real-estate comparables) data in natural language. The\nserver is a **thin pass-through**: it adds shape and transport only — every\ntenant-isolation, authentication, rate-limit, and billing rule lives in\nPartnerAPI v2, not here.\n\n> **Not a Sedis customer yet?** This server requires a Sedis PartnerAPI v2\n> key — there is no free tier or trial. Get in touch:\n> [info@sedis.se](mailto:info@sedis.se) ·\n> [Fråga Sedis](https://www.sedis.se/fraga-sedis/)\n\n## Install\n\n### Easiest: one-click Claude Desktop bundle (`.mcpb`) — recommended\n\nFor non-technical users, install the **Desktop Extension** — a single file, no\nNode, no JSON, no terminal:\n\n1. Download **`sedis-mcp.mcpb`** from the [latest release](https://github.com/sedis-ab/sedis-mcp/releases/latest).\n2. **Double-click it** (or open Claude Desktop → **Settings → Extensions** and drag it in) and click **Install**.\n3. Paste your **Sedis API key** into the field that appears (stored in your OS keychain) and confirm.\n4. Done — start a chat and ask, e.g. _\"Visa nyckeltal för Fabege\"_ (`lang: \"sv\"` for Swedish).\n\n> The bundle packages the exact server described below together with its\n> dependencies; Claude Desktop supplies the Node runtime, so the user installs\n> nothing else. Ask your Sedis administrator for a key — a **customer-level (M2M)\n> key** needs no per-session two-factor step. Maintainers build the bundle with\n> `npm run build:mcpb` (output: `dist/sedis-mcp.mcpb`).\n\n### Manual config (any MCP client — Claude Code, Cursor, …)\n\nThe server runs over stdio and is launched on demand via `npx` — no global\ninstall needed. The canonical launch command is:\n\n```bash\nnpx -y @sedis/mcp\n```\n\nAdd it to your client's MCP config and set your PartnerAPI key:\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"sedis\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@sedis/mcp\"],\n      \"env\": {\n        \"SEDIS_API_KEY\": \"your-partnerapi-v2-key\"\n      }\n    }\n  }\n}\n```\n\n- **Claude Desktop:** add the block above to `claude_desktop_config.json`.\n- **Cursor / other clients:** add it to the client's `mcp.json` (same shape).\n\n### Configuration\n\n| Env var              | Required | Default               | Purpose                                                                 |\n| -------------------- | -------- | --------------------- | ----------------------------------------------------------------------- |\n| `SEDIS_API_KEY`      | yes      | —                     | Your PartnerAPI v2 key. Sent **only** as the `X-Api-Key` header; never logged. |\n| `SEDIS_API_BASE_URL` | no       | `https://api.sedis.se`| Override the v2 base URL (e.g. for an alpha/beta environment).          |\n| `SEDIS_API_SESSION`  | no       | —                     | Optional startup **seed** for the session token (user-owned keys only). Sent as `X-Api-Session`; never logged. Usually you set this at runtime with the `set_session` tool instead — no restart needed. |\n\nThe key is validated **lazily** — the server starts without it and returns a\nfriendly, actionable error on the first tool call if it is missing or invalid.\nThere is no startup ping.\n\n> **Tools not showing up?** MCP servers are loaded when your client **starts** —\n> after editing the config, fully restart/reload the client (a new chat in the same\n> window is not enough). If you registered it via a CLI (`claude mcp add`), make sure\n> it landed in the right **scope**: a server added in one directory isn't visible in\n> another project unless you use a global/user scope.\n\n### Session tokens (user-owned keys)\n\nIf your key is **owned by a specific user** (issued to a named person, not a\nmachine/M2M integration key), PartnerAPI v2 requires a short-lived **session\ntoken** alongside `X-Api-Key`, refreshed periodically via two-factor auth:\n\n1. On a `401` with reason `session_expired` / `session_invalid`, the tool error\n   carries a **`reproveUrl`**. Open it in a browser, complete 2FA, and copy the\n   freshly-minted `sedis_sess_…` token.\n2. Paste it with the **`set_session`** tool — it is carried as `X-Api-Session`\n   on the **very next call, no client restart needed**. Use **`clear_session`**\n   to sign out.\n3. Optionally seed a token at startup with the `SEDIS_API_SESSION` env var (handy\n   for CI / power users); at runtime `set_session` always takes precedence.\n\n**Machine / org-wide keys (no owner) are headless** — `X-Api-Key` only, no\nsession token, and you never call `set_session`.\n\n### Local development / testing against a non-production environment\n\nTo run a local build (unpublished) or point at a non-production environment, swap `npx`\nfor the built entrypoint and override the base URL:\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"sedis-local\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/sedis-mcp/build/index.js\"],\n      \"env\": {\n        \"SEDIS_API_KEY\": \"your-non-production-key\",\n        \"SEDIS_API_BASE_URL\": \"https://<your-non-production-host>\"\n      }\n    }\n  }\n}\n```\n\nAsk the Sedis team for the host name — non-production environments are not publicly\ndocumented. This is a development convenience only; production users just use the\n`npx -y @sedis/mcp` block above with a single `SEDIS_API_KEY`, which defaults to\n`https://api.sedis.se`.\n\n## Tools\n\nAll tools are **read-only**. Tenant scope is enforced by v2: the \"YOUR …\" tools\nonly ever return data your key is entitled to, and a request for another\ntenant's object comes back as a friendly _not found_ (never a 403 that would\nleak existence).\n\n### Bolagsanalys (listed-company financials)\n\n| Tool                          | What it does                                                          |\n| ----------------------------- | -------------------------------------------------------------------- |\n| `bolagsanalys_list_companies` | Search the catalog of listed companies by name fragment.             |\n| `bolagsanalys_find_parameter` | Discover the right financial parameter by name fragment.             |\n| `bolagsanalys_get_data`       | Fetch quarterly figures. Pass one `companyId`, or **omit it to get all companies** for a parameter/quarter. |\n| `bolagsanalys_search_data`    | Batch-fetch figures for a specific set of companies — `companyIds[]` (max 50). |\n\n### Fastighetsbenchmark (real-estate comparables)\n\n| Tool                                       | What it does                                                              |\n| ------------------------------------------ | ------------------------------------------------------------------------ |\n| `fastighetsbenchmark_find_parameter`       | Discover the right real-estate benchmark parameter by name.              |\n| `fastighetsbenchmark_search_property_units`| Find YOUR property units (Fastighet) by name, municipality, zone, or **property-type name** (`propertyTypeName`, e.g. \"Office\"/\"Kontor\"). |\n| `fastighetsbenchmark_list_samlingar`       | List YOUR collections (Samling) and their members.                       |\n| `fastighetsbenchmark_list_jamforelseobjekt`| List YOUR comparison zones (Jämförelseobjekt).                           |\n| `fastighetsbenchmark_get_comp_timeseries`  | Pull the actual CompDatum benchmarking time-series (self-describing values). |\n| `fastighetsbenchmark_list_reference_zones` | List the shared, Sedis-owned market **reference zones** (same for every key). |\n\nNames and descriptions are **English by default**; pass `lang: \"sv\"` on the\nparameter-discovery and property-unit tools to get Swedish.\n\n### Session (user-owned keys)\n\n| Tool            | What it does                                                                                                                   |\n| --------------- | ----------------------------------------------------------------------------------------------------------------------------- |\n| `set_session`   | Paste a freshly-minted `sedis_sess_…` token (from the reprove page) — carried as `X-Api-Session` on the next call, no restart. |\n| `clear_session` | Forget the current session token (sign out).                                                                                  |\n\nThese are needed only for **user-owned** keys (see [_Session tokens_](#session-tokens-user-owned-keys) above);\nmachine / org-wide keys never use them.\n\nErrors are mapped from PartnerAPI v2's RFC 7807 problem responses into short,\nfriendly tool errors that carry a `traceId` for support — and never the API key\nor a stack trace. If a tool reports a **session / two-factor re-verification**\nerror, open the `reproveUrl` in the message, complete 2FA, copy the new\n`sedis_sess_…` token, and paste it via the **`set_session`** tool — then retry\n(no client restart). See [_Session tokens (user-owned keys)_](#session-tokens-user-owned-keys) above.\n\n## API reference\n\nThis server is a wrapper. The underlying endpoints, query conventions,\nmulti-tenant isolation model, geometry, error shapes, rate limits, and data\nfreshness are documented in the **PartnerAPI v2 guide** that Sedis provides with\nyour API key — contact Sedis if you need access. The live OpenAPI description is\nserved at `<SEDIS_API_BASE_URL>/openapi/v2.json` (default\n[`https://api.sedis.se/openapi/v2.json`](https://api.sedis.se/openapi/v2.json)).\nThis README does not duplicate that reference.\n\n## Data use\n\nUse of Sedis data in AI/LLM contexts is subject to your Sedis agreement and the\naccompanying MCP data-use terms. See [SECURITY.md](SECURITY.md) for the\nkey-handling and supply-chain posture.\n\n## Licence\n\n[MIT](LICENSE).\n",
  "bytes": 10192,
  "sha": "ec3ff0ba9cf9e8c6772bd2a66262778d1a67b635c036346b71d2fb550e0d1fd4",
  "repo_slug": "sedis-ab/sedis-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sedis_ab_mcp_15631675/readme"
}