Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
The company registry MCP: brreg orgnr, Companies House, Bolagsverket organisationsnummer.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
REGISTRY_MCP_CONTACT_EMAIL, COMPANIES_HOUSE_API_KEY, BOLAGSVERKET_CLIENT_ID, BOLAGSVERKET_CLIENT_SECRET, BOLAGSVERKET_ENVIRONMENTValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://api.foretak.dev/mcpOpen Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"registry": {
"command": "npx",
"args": [
"-y",
"registry-mcp"
],
"env": {
"REGISTRY_MCP_CONTACT_EMAIL": "your-value",
"COMPANIES_HOUSE_API_KEY": "your-value",
"BOLAGSVERKET_CLIENT_ID": "your-value",
"BOLAGSVERKET_CLIENT_SECRET": "your-value",
"BOLAGSVERKET_ENVIRONMENT": "your-value"
}
}
}
}Run this in your terminal
claude mcp add --transport http registry https://api.foretak.dev/mcpclaude mcp add registry --env REGISTRY_MCP_CONTACT_EMAIL=your-value --env COMPANIES_HOUSE_API_KEY=your-value --env BOLAGSVERKET_CLIENT_ID=your-value --env BOLAGSVERKET_CLIENT_SECRET=your-value --env BOLAGSVERKET_ENVIRONMENT=your-value -- npx -y registry-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"registry": {
"url": "https://api.foretak.dev/mcp"
}
}
}Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"registry": {
"command": "npx",
"args": [
"-y",
"registry-mcp"
],
"env": {
"REGISTRY_MCP_CONTACT_EMAIL": "your-value",
"COMPANIES_HOUSE_API_KEY": "your-value",
"BOLAGSVERKET_CLIENT_ID": "your-value",
"BOLAGSVERKET_CLIENT_SECRET": "your-value",
"BOLAGSVERKET_ENVIRONMENT": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"registry": {
"type": "http",
"url": "https://api.foretak.dev/mcp"
}
}
}Paste into .vscode/mcp.json in your project
{
"servers": {
"registry": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"registry-mcp"
],
"env": {
"REGISTRY_MCP_CONTACT_EMAIL": "your-value",
"COMPANIES_HOUSE_API_KEY": "your-value",
"BOLAGSVERKET_CLIENT_ID": "your-value",
"BOLAGSVERKET_CLIENT_SECRET": "your-value",
"BOLAGSVERKET_ENVIRONMENT": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://api.foretak.dev/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
REGISTRY_MCP_CONTACT_EMAIL envBOLAGSVERKET_ENVIRONMENT envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
We have not read this server’s tool list yet; we check endpoints in rotation.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account foretak, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Not checked yet; we check endpoints in rotation
Not checked yet; we check endpoints in rotation
Not checked yet; we read the tool list when we check the endpoint
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: COMPANIES_HOUSE_API_KEY, BOLAGSVERKET_CLIENT_ID, BOLAGSVERKET_CLIENT_SECRET
Either way works: install it on your computer or connect to the cloud version.
The GitHub repo last changed –, and the latest version (0.4.2) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Spec Driven Development, Remote Desktop Commander, Filesystem MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Filesystem MCP server for AI assistants.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Company data for AI agents, any country. One MCP server and REST API, three national registers today: the United Kingdom's Companies House, looked up by company number; Norway's Enhetsregisteret / Brønnøysundregistrene (brreg), looked up by organisasjonsnummer (orgnr); and Sweden's Bolagsverket, looked up by organisationsnummer — one JSON shape whichever you ask.
claude mcp add registry-mcp --transport http https://api.foretak.dev/mcp?src=readme
No install step, over stdio:
claude mcp add registry-mcp -- uvx registry-mcp
What makes it worth a tool slot:
company_deadlines gives the next filing date and names why in applies_because — a Norwegian legal form's statutory duty, or "Companies House publishes this date for the company itself" when the register states it rather than us computing it. Quote the reason, not just the number.cached and fetched_at. OpenCorporates' own knowledge base tells users to "allow 30 days" for a correction to reach its site — a 30× freshness gap, stated by the incumbent about itself.Security. Read-only, always — nothing here writes to a register or anywhere else. No credentials are required from a caller; this deployment's own upstream credential (COMPANIES_HOUSE_API_KEY) is read from the environment and never logged or returned. The base lookup calls three named upstreams and nothing else: data.brreg.no, api.company-information.service.gov.uk and gw.api.bolagsverket.se. include=["lei"]/include=["parents"] additionally call api.gleif.org (GLEIF, CC0, keyless); include=["peppol"] additionally resolves a DNS record at the Peppol SML and calls whichever SMP host it names for that participant, falling back to the Peppol Directory (directory.peppol.eu) only when neither answers — see the attachments above. No personal data beyond what each national register already publishes about the entity itself — and because a Swedish sole trader's company number *is* their personnummer, the usage log stores no identifier at all for a country whose identifiers can be a natural person's (legal/privacy.md). This service does not perform sanctions, PEP or adverse-media screening, and it does not verify bank account details. Details: SECURITY.md.
One-click install, for a remote streamable-HTTP server:
Other clients (Claude Desktop, Cursor, VS Code, Cline, plain JSON configs): see docs/clients.md.
ChatGPT reaches an MCP server through a custom connector, and its deep research mode calls exactly two tools — search and fetch — which this server ships alongside the five registry tools. In ChatGPT, open Settings → Connectors, add a custom connector, and give it:
https://api.foretak.dev/mcp?src=readme
No authentication, no key, no account. If your ChatGPT plan does not show custom connectors under Settings → Connectors, turn on Settings → Security and login → Developer mode first, then add the URL from https://chatgpt.com/plugins.
search takes one free-text query — a company name, a national identifier, or a name plus a country ("Tesco United Kingdom") — and returns citable rows; fetch takes a row's id ("NO:923609016") and returns that company's register record and its statutory filing deadlines, with the full JSON of both in metadata.
Claude Desktop takes the same URL as a custom connector: Settings → Connectors → Add custom connector, then https://api.foretak.dev/mcp?src=readme. No key. For a local stdio install instead, see Configuration.
Status:
0.4.2, live —GET /healthreturns{"version":"0.4.2","countries":["GB","NO","SE"]}. The five registry tools and their response shapes are frozen; two connector aliases (search,fetch) wrap them for ChatGPT and add no new shape. The hosted API atapi.foretak.devis live, and listed in the official MCP registry asio.github.foretak/registry-mcp. Countries: United Kingdom (Companies House), Norway (brreg), Sweden (Bolagsverket) — see below for each country's identifier format and example calls.
The same two commands as above — Streamable HTTP or local stdio. To add it as a project-level .mcp.json file instead of the CLI, see Configuration.
$ curl https://api.foretak.dev/v1/NO/company/923609016
{ "country": "NO", "registry": "brreg", "id": "923609016", "id_formatted": "923 609 016", "id_scheme": "organisasjonsnummer", "euid": null, "name": "EQUINOR ASA", "legal_form_code": "ASA", "legal_form": "Public limited company", "legal_form_local": "Allmennaksjeselskap", "status": "active", "is_active": true, "registered_at": "1995-03-12", "vat_registered": true, "vat_number": "NO923609016MVA", "vat_registered_at": "1989-07-01", "employees": 21239, "share_capital": 5976872600.0, "share_capital_currency": "NOK", "business_address": {"lines": ["Forusbeen 50"], "postal_code": "4035", "city": "STAVANGER"}, "advertising_protected": null, "source": "Enhetsregisteret (Brønnøysundregistrene)", "license": "NLOD 2.0" }
Abridged — the full CompanyReport also carries previous_names, industry_codes, registers, purpose, parent_id, confidence, cached, fetched_at and notes. Every field is documented in llms-full.txt §5.
euid is the EU-wide identifier some member-state registers publish (Finland does; none of ours do yet) — never the LEI, never constructed from parts. advertising_protected is true/false/null: whether the register marks this entity as protected against direct-marketing use, null meaning the register publishes no such flag at all (Norway and the UK, today); where it is true (Sweden's *reklamspärr*, for one), a notes sentence states it and that marking must travel with any contact details you pass on.
The United Kingdom, same shape, same abridgement:
$ curl https://api.foretak.dev/v1/GB/company/00445790
{ "country": "GB", "registry": "companies-house", "id": "00445790", "id_formatted": null, "id_scheme": "company number", "euid": null, "name": "TESCO PLC", "legal_form_code": "plc", "legal_form": "Public limited company", "status": "active", "is_active": true, "registered_at": "1947-11-27", "vat_registered": null, "vat_number": null, "employees": null, "employees_reported": false, "registers": {"insolvency": false}, "industry_codes": [{"code": "47110", "description": null, "scheme": "SIC 2007", "rank": 1}], "business_address": {"lines": ["Tesco House, Shire Park", "Kestrel Way"], "postal_code": "AL7 1GA", "city": "Welwyn Garden City"}, "advertising_protected": null, "published_deadlines": [ {"kind": "annual_accounts", "due_date": "2027-08-26", "period_end": "2027-02-26", "overdue": false, "source": "accounts.next_accounts.due_on"}, {"kind": "confirmation_statement", "due_date": "2027-07-02", "period_end": "2027-06-18", "overdue": false, "source": "confirmation_statement.next_due"} ], "source": "Companies House (UK)", "license": "Crown copyright — Companies House public register, free to re-use" }
published_deadlines carries the dates the register publishes itself, with the upstream field each came from. It is [] for Norway and Sweden, which compute all of their own.
Sweden, added in 0.3.0, is where "one shape" starts to earn the claim:
$ curl https://api.foretak.dev/v1/SE/company/5560160680
{ "country": "SE", "registry": "bolagsverket", "id": "5560160680", "id_formatted": "556016-0680", "id_scheme": "organisationsnummer", "euid": null, "name": "Telefonaktiebolaget LM Ericsson", "legal_form_code": "AB", "legal_form": "Private or public limited company", "legal_form_local": "Aktiebolag", "status": "active", "is_active": true, "registered_at": "1918-08-19", "vat_registered": null, "vat_number": null, "employees": null, "employees_reported": false, "industry_codes": [{"code": "70100", "description": "Verksamheter som utövas av huvudkontor", "scheme": "SNI 2007", "rank": 1}], "postal_address": {"postal_code": "16483", "city": "STOCKHOLM", "country_code": "SE"}, "advertising_protected": null, "published_deadlines": [], "source": "Bolagsverket (bolagsverket.se)", "license": "Free re-use (Bolagsverket/SCB high-value datasets, EU Open Data Directive) — the publisher names no licence" }
Bolagsverket names no licence for this data, so neither do we: the string says what the permission is and says plainly that there is no licence name to quote, because a familiar name in that field would be a fabrication.
Sweden publishes no status field at all. status is derived from three independent signals — a strike-off date, an ongoing winding-up or restructuring procedure, and Statistics Sweden's "economically active" flag — and is_active therefore means *on the register and not winding down*, which is not the same as trading. Where any of that is unavailable the answer is unknown, never active.
Two dates are computed, and each carries the provision it comes from:
$ curl "https://api.foretak.dev/v1/SE/company/5560160680/deadlines?today=2026-09-07"
{"kind": "general_meeting", "due_date": "2027-06-30", "days_until": 296, "rolled_forward"
Only the beginning is shown; read the rest in the repo