Normatia
AI-native platform that automates Spanish building code compliance and technical regulations for the AECO sector
Install
Install and configure the MCP from https://github.com/normatia/normatia now. Follow the repository's installation instructions, ask me for anything you can't complete yourself, and verify its tools load.π¬π§ English | πͺπΈ EspaΓ±ol
Normatia
Open-source developer toolkit for Spanish building code compliance.
Main site: normatia.com API docs: docs.normatia.com API base: api.normatia.com
What is Normatia?
Normatia is a building code compliance platform for Spain's AECO sector (architecture, engineering, construction, and operations). This repository contains the open-source developer toolkit: an MCP server for AI assistants, a TypeScript SDK, API usage examples, and reusable AI skills.
MCP Server
Normatia provides a remote MCP server that gives AI assistants access to Spanish building regulations in the context of a specific project β no installation required.
https://mcp.normatia.com/mcp
Everything is scoped to a project
Normatia's regulatory scope is defined per project: every project on normatia.com carries its municipality, its applicable regulations (national, regional, municipal), its uploaded documents, the recorded facts about the building and any saved calculations.
That means the assistant never has to ask for the city, the climate zone or which edition of the CTE applies β the answer arrives with those values already resolved. And a municipality with no project has no answer: the server says so and points at creating one, because municipal ordinances differ completely between town councils.
Available Tools
Three tools, all read-only. Nothing in the MCP surface writes to your projects.
| Tool | Description | Cost |
|---|---|---|
ask(query, project_id?) | Ask a natural-language question about the regulations that apply to a project. The only tool that returns citable regulatory text. | 1 credit |
get_project_info(project_id?) | Full project context: location, territory tech data, applicable regulations with their current edition, files, generated documents, memory and calculations. | Free |
list_projects() | Projects the user can query, with their project_id, location and which one is active. | Free |
ask runs the same agent loop as the chat on normatia.com, not a single-shot search: it chains several searches, reads the project's memory and saved calculations, consults uploaded documents and cites every source with validated [N] markers. Because the call is synchronous it runs on shorter budgets β 6 reasoning rounds, 6 searches, 120 seconds β so set your client's tool-call timeout to 150 seconds or more.
Every tool takes an optional project_id, resolved as explicit project_id β the user's active project. To ask about another municipality, call list_projects() and pass the matching id: several projects can be queried in the same conversation, and the user's active project on the website never changes underneath them.
Setup
Claude
Connect Normatia to claude.ai as a custom connector. Available on Free (limited to 1 connector), Pro, Max, Team, and Enterprise plans. Currently in beta.
Free, Pro and Max plans:
- Navigate to Customize > Connectors
- Click "+" then "Add custom connector"
- Enter the server URL:
https://mcp.normatia.com/mcp - Select
OAuthas authentication - Click "Add"
Team and Enterprise plans (owner):
- Navigate to Organization settings > Connectors
- Click "Add" β hover "Custom" β select "Web"
- Enter the server URL:
https://mcp.normatia.com/mcp - Select
OAuthas authentication - Click "Add"
Once added by the owner, members connect from Customize > Connectors.
After configuration, enable Normatia per conversation via the "+" button in the lower left β "Connectors".
ChatGPT
Connect Normatia to ChatGPT as a custom MCP app. Available on Free, Plus, Pro, Business, and Enterprise/Edu plans. Currently in beta.
- Enable developer mode: go to Settings β Apps β Advanced Settings and toggle Developer mode
- Go to Settings β Apps β Create
- Enter the server URL:
https://mcp.normatia.com/mcp - Select
OAuthas authentication - Click Create
Once created, enable the app in any conversation via the "+" button and select Normatia.
For Business and Enterprise/Edu plans, workspace admins must configure and publish the app from Workspace Settings β Apps before members can use it.
Prerequisites
The following clients require an API key. Get one at normatia.com/es/api. Keys use the format sk-normatia-....
Claude Desktop
Add to your config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"normatia": {
"type": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
Claude Code
claude mcp add normatia --transport streamable-http https://mcp.normatia.com/mcp \
-h "Authorization: Bearer sk-normatia-..."
VS Code / GitHub Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"normatia": {
"type": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
Or add to your User Settings (JSON) for global access:
{
"mcp": {
"servers": {
"normatia": {
"type": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
}
Cursor
Add to Cursor MCP settings (~/.cursor/mcp.json):
{
"mcpServers": {
"normatia": {
"type": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
Windsurf
Add to Windsurf MCP settings:
{
"mcpServers": {
"normatia": {
"type": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
Zed
Add to Zed settings (~/.config/zed/settings.json):
{
"context_servers": {
"normatia": {
"transport": "streamable-http",
"url": "https://mcp.normatia.com/mcp",
"headers": {
"Authorization": "Bearer sk-normatia-..."
}
}
}
}
Any MCP Client
Use these connection details with any MCP-compatible client:
| Setting | Value |
|---|---|
| Transport | streamable-http |
| URL | https://mcp.normatia.com/mcp |
| Auth header | Authorization: Bearer sk-normatia-... |
For full setup instructions for 30+ MCP clients, see docs.normatia.com/mcp.
Example Prompts
Once connected, try these prompts in your AI assistant:
- "Which regulations are active on my project, and which edition of each?"
- "What is the maximum window U-value I can use on my project?"
- "Review the attached carpentry schedule and tell me whether the values comply"
- "What minimum clear height does the municipal ordinance require on the Sevilla project?"
- "Compare the accessibility requirements of my Madrid project against the Bilbao one"
- "What does the code say about garage ventilation, given the calculations I already saved?"
TypeScript SDK
npm install normatia
import { NormatiaClient } from 'normatia';
const client = new NormatiaClient({ apiKey: 'sk-normatia-...' });
const location = await client.getLocation('ES-41091');
console.log(location.tech_data.climate_zone); // "B4"
See packages/sdk-typescript/README.md for full documentation.
Examples
| Directory | Description |
|---|---|
| examples/curl | cURL examples for all main API endpoints |
| examples/python | Python examples using httpx |
| examples/typescript | TypeScript examples using the SDK |
AI Skills
The skills directory contains reusable system prompts for AI agents working with Normatia:
- Building Codes β Expert navigation of Spanish regulations (CTE, RITE, LOE)
- Compliance β Structured compliance verification workflows
- Location-Aware β Geography-contextual regulatory guidance
API Overview
| Endpoint | Method | Description |
|---|---|---|
/api/v1/location/search | GET | Search geographic locations |
/api/v1/location/{geo_id} | GET | Get location detail + climate data |
/api/v1/codes/search | GET | Search building codes |
/api/v1/codes/{slug} | GET | Get code detail |
/api/v1/codes/{slug}/versions | GET | List code versions |
/api/v1/codes/{slug}/versions/{version} | GET | Get version detail + sections |
/api/v1/projects | GET | List the projects the user can query |
/api/v1/project/info | GET | Full context of a project |
/api/v2/ask | POST | Agentic regulatory Q&A over a project |
/api/v1/verify | POST | Compliance verification |
POST /api/v1/ask (the old single-shot RAG endpoint) is frozen and hidden from the public schema. It still works for existing integrations, but new ones should use /api/v2/ask.
Documentation
Full API reference and integration guides at docs.normatia.com.
Contributing
Contributions are welcome. Please read CONTRIBUTING.md before opening an issue or pull request.
License
MIT β see LICENSE.
