nace-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nace-mcpFind NACE code for a car repair shop"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nace-mcp
An MCP server exposing NACE Rev. 2.1 economic activity classification codes for AI agents.
NACE (Nomenclature of Economic Activities) is the European standard for classifying economic activities. This server loads all 1,047 codes into memory at startup and provides four tools for browsing, looking up, searching, and fuzzy-matching codes — without ever dumping the full dataset to the agent.
MCP Configuration
Add to your Claude (or any MCP-compatible client) config:
{
"mcpServers": {
"nace-mcp": {
"command": "npx",
"args": ["nace-mcp"]
}
}
}Related MCP server: filed-mcp-server
Tools
nace_get(code)
Returns full details for a single NACE code.
Input: code — e.g. "A", "01", "25.1", "25.11"
Example output:
{
"code": "95.31",
"label": "Repair and maintenance of motor vehicles",
"level": "class",
"parent": "95.3"
}nace_browse(parent_code?)
Returns the direct children of a code (compact: code + label only). Omit parent_code to list all 22 top-level sections. Max 50 results.
Input: parent_code (optional) — e.g. "C", "25", "25.1"
Example — nace_browse() (no argument):
[
{ "code": "A", "label": "Agriculture, forestry and fishing" },
{ "code": "B", "label": "Mining and quarrying" },
{ "code": "C", "label": "Manufacturing" },
...
]Example — nace_browse("J"):
[
{ "code": "58", "label": "Publishing activities" },
{ "code": "59", "label": "Motion picture, video and television programme production, sound recording and music publishing activities" },
{ "code": "60", "label": "Programming, broadcasting, news agency and other content distribution activities" },
...
]nace_search(query)
Case-insensitive substring search across all activity labels. Returns up to 10 matches.
Input: query — e.g. "software", "fishing", "consulting"
Example — nace_search("software"):
[
{ "code": "58.1", "label": "Publishing of books, newspapers and other publishing activities, except software publishing", "level": "group" },
{ "code": "58.19", "label": "Other publishing activities, except software publishing", "level": "class" },
{ "code": "58.2", "label": "Software publishing", "level": "group" },
{ "code": "58.29", "label": "Other software publishing", "level": "class" }
]nace_suggest(activity_description)
Fuzzy-matches a free-text description to NACE codes. Tokenizes the input, scores by matched terms, and returns the top 5 candidates with a brief explanation. Designed for AI agents doing classification.
Input: activity_description — free-text description of the economic activity
Example — nace_suggest("computer programming software development consultancy"):
[
{
"code": "62",
"label": "Computer programming, consultancy and related activities",
"level": "division",
"reason": "Matched: \"computer\", \"programming\", \"consultancy\""
},
{
"code": "62.1",
"label": "Computer programming activities",
"level": "group",
"reason": "Matched: \"computer\", \"programming\""
},
{
"code": "62.10",
"label": "Computer programming activities",
"level": "class",
"reason": "Matched: \"computer\", \"programming\""
},
...
]Tip: For non-English descriptions (e.g. German "KFZ Mechaniker"), rephrase in English before calling
nace_suggest.
Prompt Examples
These examples show how an AI agent uses the tools in practice.
"What NACE code applies to a car repair shop?"
The agent calls nace_suggest with an English description:
nace_suggest("motor vehicle repair maintenance workshop")[
{
"code": "95",
"label": "Repair and maintenance of computers, personal and household goods, and motor vehicles and motorcycles",
"level": "division",
"reason": "Matched: \"motor\", \"vehicle\", \"repair\", \"maintenance\""
},
{
"code": "95.3",
"label": "Repair and maintenance of motor vehicles and motorcycles",
"level": "group",
"reason": "Matched: \"motor\", \"vehicle\", \"repair\", \"maintenance\""
},
{
"code": "95.31",
"label": "Repair and maintenance of motor vehicles",
"level": "class",
"reason": "Matched: \"motor\", \"vehicle\", \"repair\", \"maintenance\""
}
]The agent then drills into the best match with nace_get("95.31") to confirm the parent chain:
{
"code": "95.31",
"label": "Repair and maintenance of motor vehicles",
"level": "class",
"parent": "95.3"
}Result: 95.31 is the correct class-level code for a car repair shop.
"What NACE code covers a bakery?"
nace_suggest("bakery bread pastry production")[
{
"code": "10.71",
"label": "Manufacture of bread; manufacture of fresh pastry goods and cakes",
"level": "class",
"reason": "Matched: \"bread\", \"pastry\""
}
]Result: 10.71 — first candidate is an exact match, no further navigation needed.
"Explore the information & communication sector"
The agent browses the hierarchy top-down:
nace_browse("J")[
{ "code": "58", "label": "Publishing activities" },
{ "code": "59", "label": "Motion picture, video and television programme production, sound recording and music publishing activities" },
{ "code": "60", "label": "Programming, broadcasting, news agency and other content distribution activities" },
{ "code": "61", "label": "Telecommunications" },
{ "code": "62", "label": "Computer programming, consultancy and related activities" },
{ "code": "63", "label": "Information service activities" }
]Then zooms into division 62:
nace_browse("62")[
{ "code": "62.1", "label": "Computer programming activities" },
{ "code": "62.2", "label": "Computer consultancy and computer facilities management activities" },
{ "code": "62.3", "label": "Computer facilities management activities" },
{ "code": "62.9", "label": "Other information technology and computer service activities" }
]Data
Source: jnsprnw/nace-codes — community-maintained JSON conversion of the official Eurostat NACE Rev. 2.1 classification
Coverage: 1,047 entries across 22 sections (A–U), 4 levels (section → division → group → class)
Authority: Eurostat NACE Rev. 2.1
Development
npm install
npm run build # compile TypeScript → dist/
node dist/index.js # run the server (listens on stdio)To inspect with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsAvailable Tools
4 toolsnace_browseA
Returns direct children of a NACE code (code + label only). Omit parent_code to get all 22 top-level sections. Max 50 results.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_code | No | Parent NACE code. Omit to list top-level sections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden and excellently discloses key behaviors: results are limited to 'direct children' (non-recursive), return fields are restricted to 'code + label only', and results are capped at 'Max 50'. These are critical runtime traits an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose, and every sentence delivers distinct information: functionality, response scope, optional behavior, and result limit. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter tool with no output schema, the description sufficiently covers all necessary context: what is returned (code+label), how to get top-level sections, the result cap, and the non-recursive nature. An agent has enough information to invoke correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% since the parameter's description ('Parent NACE code. Omit to list top-level sections.') already explains core semantics. The tool description adds the 'direct children' detail, but that is more about output behavior than parameter syntax, so the description adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Returns direct children of a NACE code', with a specific scope ('code + label only'). This distinguishes it from sibling tools like nace_get (single item), nace_search (query matching), and nace_suggest (autocomplete) by explicitly framing it as a tree-browsing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: 'Omit parent_code to get all 22 top-level sections' and 'Max 50 results' gives a constraint. However, it does not explicitly mention alternatives or when to prefer this tool over siblings, leaving some room for the agent to infer the browse-vs-search/get distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nace_getA
Returns full details for a single NACE Rev. 2.1 code: code, label, level (section/division/group/class), and parent code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | NACE code — e.g. 'A', '01', '01.1', '01.11' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the return fields (code, label, level, parent code), which is helpful, but it does not mention error cases, edge behavior (e.g., invalid code), or any side effects—though this is likely a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main purpose and necessary output details. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter lookup tool with no output schema, the description is largely complete: it states the purpose and enumerates the returned fields. Minor gaps include no mention of error behavior or formatting, but these are not critical for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the single parameter 'code' documented and given examples. The description itself does not add parameter-level detail, so it meets the baseline but provides no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns full details') and identifies the resource ('a single NACE Rev. 2.1 code'), clearly distinguishing it from sibling tools like browse, search, and suggest by emphasizing 'single' code retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies this tool is for fetching details of a known, single NACE code, contrasting with broader operations like browse or search. However, it does not explicitly name alternatives or state when not to use it, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nace_searchA
Case-insensitive substring search across all 1,047 NACE Rev. 2.1 activity labels. Returns up to 10 matches with code, label, and level.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Substring to search for in activity labels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses key behaviors: case-insensitivity, substring matching, full corpus coverage (1,047 entries), a result cap of 10, and the exact fields returned (code, label, level). This goes beyond a basic summary and sets clear expectations, though it does not mention edge cases like empty queries or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the primary action and resource. Every phrase is informative: case-insensitive, substring, full scope, result limit, and return fields. There is no redundant or irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter search tool with no output schema, the description is sufficient. It explains the search behavior, the scope, the limit, and the return structure (code, label, level). Without an output schema, this description fills the necessary gaps for an agent to invoke the tool and understand the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single 'query' parameter by describing it as a 'substring to search for'. The description reinforces this and adds the case-insensitive attribute, but the core parameter semantic is already fully captured in the schema. Baseline 3 is appropriate as the description adds minimal supplementary meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' with specific technical characteristics ('case-insensitive substring search'), the resource ('NACE Rev. 2.1 activity labels'), and the scope ('all 1,047'). This distinguishes it from sibling tools like nace_get, nace_browse, and nace_suggest by clarifying it is a flexible search rather than a targeted lookup or hierarchical navigation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool: when you need to find activities by partial label text. However, it does not explicitly state alternatives or provide exclusion criteria (e.g., 'for exact codes use nace_get'). The usage is implied by the term 'search' and the return of matches, but the lack of direct sibling comparisons leaves guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nace_suggestA
Fuzzy-match a free-text activity description to NACE Rev. 2.1 codes. Tokenizes the input, scores by matched terms, and returns the top 5 candidates with a reason. Ideal for AI agents classifying business activities.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_description | Yes | Free-text description of the economic activity to classify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explains the internal process (tokenizes, scores by matched terms) and the output behavior (returns top 5 with a reason), which is transparent about how results are generated. It does not detail edge cases like zero matches or partial matches, but the provided context is sufficient for a simple read-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first defines the core function, the second details the method, and the third gives the use case. No fluff, no unnecessary repetition, and it is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the essential aspects: what it does, how it works, and when to use it. It mentions the output shape (top 5 with reason) which is sufficient. Missing only minor details like behavior with ambiguous/empty input, but overall it is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'activity_description', already describing it as a free-text description. The tool description merely echoes 'free-text activity description' without adding new semantics, so it provides no value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fuzzy-match') and resource ('free-text activity description to NACE Rev. 2.1 codes'), clearly distinguishing it from sibling tools like nace_search (likely exact/match-oriented) and nace_browse (hierarchical). It states the output (top 5 candidates with reason), making the tool's function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Ideal for AI agents classifying business activities' provides clear context for when to use this tool. However, it does not explicitly mention alternatives or exclusions (e.g., 'use nace_search for exact code lookup'), so it lacks the direct comparison that would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.1- First observed
nace_browse - First observed
nace_get - First observed
nace_search - First observed
nace_suggest
TDQS
Each tool serves a distinct purpose: exact code lookup, hierarchical browsing, substring search, and fuzzy matching for classification. There is no overlap in functionality, and the descriptions clearly differentiate them.
All tools follow a consistent 'nace_<verb>' pattern (get, browse, search, suggest). This is a uniform and predictable naming convention.
With 4 tools, the server is well-scoped for its purpose. Each tool covers a necessary operation for working with NACE codes, and there is no bloat or redundancy.
The tool set covers the entire workflow: retrieving details, navigating the hierarchy, searching by text, and classifying free-text descriptions. No major functional gaps exist for a NACE classification lookup and browsing service.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for the Fail Modes taxonomy — a knowledge base of AI system failure modes
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Slovak business registers (RPO) — AI agents can query 1.4M+ Slovak legal entities via Slovakia's official Statistical Office API. Search companies by name, IČO, or get full entity details including legal form, address, and statutory representatives.21MIT
- FlicenseAqualityDmaintenanceAn MCP server that gives AI agents access to US business entity data, enabling searches across 9 state registries, SEC EDGAR filings, federal contracts, and lobbying disclosures.61-
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI agents to interact with the SkillShare registry, including searching, reading, creating, and managing resources like skills, MCP configurations, and notes.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to explore, search, and query API definitions from OpenAPI/Swagger JSON files.59MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DeJo90/nace-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server