Skip to main content
Glama
RFingAdam

EMC Regulations MCP Server

by RFingAdam
README.md
<div align="center">

<img src="assets/logo-banner.svg" alt="mcp-emc-regulations: EMC/RF compliance lookup for FCC, CISPR, IEC, ISO, automotive, medical" width="100%"/>

<br/>

[![License](https://img.shields.io/badge/License-AGPL--3.0-1E40AF.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-3776AB.svg)](https://www.python.org/downloads/)
[![MCP](https://img.shields.io/badge/MCP-server-A78BFA.svg)](https://modelcontextprotocol.io)
[![eng-mcp-suite](https://img.shields.io/badge/eng--mcp--suite-member-22D3EE.svg)](https://github.com/RFingAdam/eng-mcp-suite)

**EMC and RF regulatory lookup: emission limits, immunity levels, restricted bands, and certification matrices.**
**Drive it from your IDE, terminal, or AI agent the moment a compliance question shows up.**

[Quick start](#quick-start) ยท
[Tools](#tools) ยท
[Workflows](#workflows) ยท
[Documentation](#documentation)

</div>

---

## What is mcp-emc-regulations?

`mcp-emc-regulations` is an MCP server that answers concrete EMC and RF
compliance questions: emission limits, immunity test levels, frequency
allocations, restricted bands, certification requirements: directly
from cited standards. No PDFs, no copy-paste from a regulatory site.

It implements lookups against curated datasets sourced from **FCC Part
15/18/95**, **CISPR 11/12/14-1/22/25/32**, **IEC 61000-4-x**,
**ISO 11452 / 7637 / 16750**, **3GPP TS 36.101 / 38.101**, **ISED RSS-Gen**,
and EU harmonised standards. Live FCC text is fetched on demand from the
official **eCFR API**.

**What it does well:**

- ๐Ÿค– **AI-native via MCP.** First-class [Model Context Protocol](https://modelcontextprotocol.io)
  server with **45 tools** across FCC, CISPR, automotive, medical,
  cellular, wireless protocols, and certification advisory.
- ๐Ÿ **Multiple surfaces.** Use it from any MCP client (Claude Desktop,
  Claude Code, Codex), or call the Python package directly.
- โšก **Cited and dated.** Every dataset carries `source`, `version`, and
  `last_updated`. The `data_sources` tool reports current versions; live
  eCFR queries are tagged with the eCFR snapshot date.
- โœ… **Composable.** Compare FCC vs CISPR at a frequency with distance
  correction. Generate full test plans (`test_plan_generator`,
  `immunity_test_plan`) across regions and standards in one call.
- ๐Ÿ”’ **MIT licensed.** Drop-in for compliance review workflows.

---

## Quick start

### Install

> Pre-alpha: not yet on PyPI. Install from source:
>
> ```bash
> git clone https://github.com/RFingAdam/mcp-emc-regulations.git
> cd mcp-emc-regulations
> uv pip install -e .
> ```

### Two surfaces, same answer

<table>
<tr>
<td valign="top" width="50%">

**Python**

```python
from mcp_emc_regulations.tools import fcc

# FCC Part 15.109 Class B radiated limit at 100 MHz
result = fcc.fcc_part15_limit(
    section="15.109",
    frequency_mhz=100,
    classification="B",
)
print(result)
```

</td>
<td valign="top" width="50%">

**CLI** (via `uv run`)

```bash
uv run --directory /path/to/mcp-emc-regulations \
  mcp-emc-regulations
# JSON-RPC over stdio: drive it from any MCP client
```

</td>
</tr>
<tr>
<td colspan="2" valign="top">

**MCP (Claude Desktop, Claude Code, Codex CLI, any MCP client)**

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "emc-regulations": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-emc-regulations", "mcp-emc-regulations"]
    }
  }
}
```

Then ask your assistant in plain English:

> *"What's the FCC Part 15 Class B radiated limit at 100 MHz, and how does it
> compare to CISPR 32 Class B at the same frequency?"*

The agent calls `fcc_part15_limit` and `emc_compare_limits` and reports
both with distance corrections.

</td>
</tr>
</table>

---

## Tools

45 MCP tools, grouped by domain. Full reference in [`docs/tools.md`](docs/tools.md).

### Emission limits

| Tool                       | Purpose                                                | Key arguments                            |
| -------------------------- | ------------------------------------------------------ | ---------------------------------------- |
| `fcc_part15_limit`         | FCC Part 15.109/15.207/15.209 limits                   | `section`, `frequency_mhz`, `classification` |
| `fcc_part18_limit`         | FCC Part 18 ISM equipment limits                       | `equipment_type`, `frequency_mhz`        |
| `fcc_part95_limits`        | FCC Part 95 personal radio service limits              | `subpart`, `frequency_mhz`               |
| `fcc_cbrs_rules`           | FCC Part 96 CBRS rules / SAS administrators            | `topic`                                  |
| `fcc_part_lookup`          | Find the FCC Part that applies to a frequency / device | `frequency_mhz`, `device_type`           |
| `cispr_limit`              | CISPR 11/22/32/14-1 limits                             | `standard`, `frequency_mhz`, `classification` |
| `ised_limit`               | ISED RSS-Gen limits (Canada)                           | `rss_number`, `frequency_mhz`            |
| `emc_compare_limits`       | Compare FCC vs CISPR at a frequency with distance correction | `frequency_mhz`, `classification`  |

### Automotive

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `cispr25_limit`            | CISPR 25 component emission limits (Classes 1โ€“5)       |
| `cispr12_limit`            | CISPR 12 vehicle-level emission limits                 |
| `iso11452_levels`          | ISO 11452-2 radiated immunity test levels              |
| `iso7637_pulses`           | ISO 7637-2 conducted transient test pulses             |
| `iso16750_conditions`      | ISO 16750 environmental test conditions                |
| `automotive_emc_overview`  | CISPR/ISO/UNECE R10 summary                            |
| `automotive_immunity_method` | Per-method immunity test details (BCI, ALSE, TEM)    |
| `oem_emc_requirements`     | OEM-specific EMC test specs (GMW, FORD-ES, VW80000)    |

### Medical / safety

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `medical_emc_requirements` | IEC 60601-1-2 medical EMC requirements                 |
| `medical_immunity_levels`  | IEC 60601-1-2 immunity test levels by use environment  |
| `safety_standard_lookup`   | Safety standards by product category                   |

### Immunity (IEC 61000-4-x)

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `iec61000_test_levels`     | IEC 61000-4 immunity test levels                       |
| `iec61000_overview`        | IEC 61000-4 family overview                            |
| `immunity_test_plan`       | Generate immunity test plan for a product class        |

### Cellular (3GPP)

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `lte_band_lookup`          | Look up LTE band by number                             |
| `lte_bands_list`           | List LTE bands (filter by region/carrier)              |
| `nr_band_lookup`           | Look up 5G NR band by name (n77, n260, โ€ฆ)              |
| `nr_bands_list`            | List NR bands (FR1, FR2, by carrier)                   |
| `frequency_to_band`        | Find which LTE/NR bands contain a frequency            |

### Wireless protocols

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `wifi_limits`              | Wi-Fi (FCC Part 15.247/15.407) channel/EIRP limits     |
| `ble_limits`               | BLE / Bluetooth FCC/CE limits                          |
| `protocol_limits`          | Generic wireless protocol limit lookup                 |
| `protocol_comparison`      | Compare wireless protocol limits across regions        |

### Frequency bands

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `fcc_restricted_bands`     | Check if frequency is in FCC 15.205 restricted band    |
| `fcc_restricted_bands_list`| List all FCC restricted bands                          |
| `ism_bands_list`           | List all ISM frequency bands                           |
| `frequency_conflict_check` | Check for conflicts between a frequency and restricted bands |

### Certification advisory

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `product_certification_advisor` | Region/market certification advice for a product   |
| `test_plan_generator`      | Generate a multi-region EMC test plan                  |
| `standard_cross_reference` | Cross-reference equivalent standards across regions    |
| `certification_matrix`     | Region ร— test-type certification matrix                |
| `market_requirements`      | Market-specific requirements (US, EU, JP, KR, AU, โ€ฆ)   |
| `eu_harmonised_standards`  | EU harmonised standards lookup (Annex Z mappings)      |

### Reference / sources

| Tool                       | Purpose                                                |
| -------------------------- | ------------------------------------------------------ |
| `emc_standards_list`       | List every standard known to the server                |
| `data_sources`             | Show dataset sources, versions, and last-updated dates |
| `source_search`            | Search configured regulatory sources                   |
| `ecfr_query`               | Live eCFR API query for 47 CFR (FCC) text              |

---

## What it solves

| Domain                | Coverage                                                | Source / Standard                                |
| --------------------- | ------------------------------------------------------- | ------------------------------------------------ |
| FCC (US)              | Part 15, 18, 95, 96 (CBRS): emission + restricted bands | 47 CFR via eCFR API + curated tables             |
| CISPR (international) | CISPR 11, 12, 14-1, 22, 25, 32: emission limits        | IEC/CISPR published standards                    |
| Automotive            | CISPR 25/12, ISO 11452, 7637, 16750, UNECE R10, OEM specs | IEC, ISO, UNECE, GMW/FORD/VW                   |
| Medical               | IEC 60601-1-2 emission + immunity by environment        | IEC 60601-1-2 ed. 4                              |
| Immunity              | IEC 61000-4-2/-3/-4/-5/-6/-8/-11                        | IEC 61000-4 series                               |
| Cellular              | LTE bands 1โ€“88, NR FR1 + FR2, carrier band lists        | 3GPP TS 36.101, 38.101                           |
| Wireless              | Wi-Fi 2.4/5/6/7 GHz, BLE, Bluetooth Classic             | FCC 15.247/15.407, CE harmonised, ETSI EN 300 328 |
| Certification         | US/CA/EU/JP/KR/AU markets + matrix + harmonised lists   | Per-region regulator publications                |

---

## Workflows

`mcp-emc-regulations` fits in the following [eng-mcp-suite](https://github.com/RFingAdam/eng-mcp-suite)
workflow bundles:

- **`emc-compliance`**: combine with `mcp-pcb-emcopilot` and `drawio-engineering-mcp`
  for the full layout-to-cert-letter loop.
- **`rf-design`**: verify wireless-protocol limits and restricted bands while
  sizing a transmit chain.
- **`automotive-emc`**: chain CISPR 25 / ISO 11452 lookups with test setup
  generation in `drawio-engineering-mcp`.

Part of [eng-mcp-suite](https://github.com/RFingAdam/eng-mcp-suite).
Use in the `emc-compliance` workflow bundle.

See the [suite manifest](https://github.com/RFingAdam/eng-mcp-suite/blob/main/manifest.yaml)
for the full list of sibling MCPs and bundle definitions.

---

## Documentation

- ๐Ÿ“˜ **[Quick Start](docs/index.md)**: install through first call.
- ๐Ÿ› ๏ธ **[Tool reference](docs/tools.md)**. Every MCP tool, every argument.
- ๐Ÿ“ **[Usage examples](docs/usage.md)**: practical end-to-end walkthroughs.
- ๐Ÿ—๏ธ **[Architecture](docs/architecture.md)**: how this MCP fits in eng-mcp-suite.

---

## Part of eng-mcp-suite

<sub>This MCP server is part of</sub>

[![eng-mcp-suite](https://img.shields.io/badge/eng--mcp--suite-engineering%20MCP%20catalog-22D3EE?style=for-the-badge)](https://github.com/RFingAdam/eng-mcp-suite)

<sub>An open umbrella for engineering MCP servers across RF, EMC, PCB,
signal integrity, EM simulation, and lab test. Same brand, same docs
structure, designed to compose. See the
[full catalog](https://github.com/RFingAdam/eng-mcp-suite#whats-included)
or jump to a sibling:</sub>

| Domain                      | Sibling MCPs                                                                 |
| --------------------------- | ---------------------------------------------------------------------------- |
| **RF / Transmission lines** | [lineforge](https://github.com/RFingAdam/lineforge)                          |
| **EMC regulatory**          | **mcp-emc-regulations** *(this repo)*                                        |
| **PCB / SI**                | mcp-pcb-emcopilot *(private: public soon)*                                  |
| **EM simulation**           | mcp-openems, mcp-nec2-antenna *(private: public soon)*                      |
| **Diagrams**                | [drawio-engineering-mcp](https://github.com/RFingAdam/drawio-engineering-mcp) |
| **3D / rendering**          | [mcp-blender](https://github.com/RFingAdam/mcp-blender)                      |
| **Remote access**           | [mcp-remote-access](https://github.com/RFingAdam/mcp-remote-access)          |
| **Lab gear**                | [copper-mountain-vna-mcp](https://github.com/RFingAdam/copper-mountain-vna-mcp), mcp-rs-spectrum-analyzer, mcp-rs-siggen, mcp-rs-cmw500 |

---

## Data currency

- Curated datasets in `src/mcp_emc_regulations/data/` carry `metadata` fields
  with `source`, `version`, and `last_updated`. Use the `data_sources` tool to
  see versions at runtime.
- `ecfr_query` pulls live CFR text from the eCFR API on each call.
- For compliance work, verify against the official standard before sign-off.

External sources can be configured in `sources.json`; use `sources.local.json`
for private overrides. Run:

```bash
uv run python scripts/update_sources.py
```

to refresh `data_sources/manifest.json`.

---

## Contributing

Contributions are welcome.

1. **Pick a [GitHub issue](https://github.com/RFingAdam/mcp-emc-regulations/issues)**.
2. **Fork + branch** (`feature/your-thing` or `fix/your-bug`).
3. **Run the local check suite**:
   ```bash
   uv run pytest
   ```
4. **Open a PR**: link the issue, request review.

---

## License

[AGPL-3.0-or-later](LICENSE). Earlier commits had a stale "MIT" badge
without a matching LICENSE file; v0.2.0 settles the repo on
AGPL-3.0-or-later to align with the eng-mcp-suite toolkit-wide license
move.

## Brand assets

The project name and the logo files in this repository are not part of the licensed
work. The licence above grants no permission to use them, except as needed to describe
the origin of the work.

## Acknowledgments

- **eCFR**: for the live regulatory text API.
- **FCC / IEC / ISO / CISPR / 3GPP / ISED / ETSI**: for the published standards
  this server indexes.
- **The MCP working group**: for the [Model Context Protocol](https://modelcontextprotocol.io) specification.

<div align="center">

<sub>Part of <a href="https://github.com/RFingAdam/eng-mcp-suite">eng-mcp-suite</a>: built for RF engineers, PCB designers, EMC labs, and AI agents.</sub>

</div>

TDQS

B3.4/5.0

Scored across 45 tools

Disambiguation4/5

Most tools have distinct purposes, e.g., separate tools for different CISPR parts and FCC parts. However, some overlap exists between advisor tools (certification_matrix, product_certification_advisor, market_requirements) and test planners (test_plan_generator, immunity_test_plan), though descriptions clarify roles.

Naming Consistency4/5

Tool names predominantly follow a descriptive noun_verb pattern (e.g., cispr12_limit, fcc_part15_limit, lte_band_lookup). Some abbreviations are used consistently, but a few names like 'frequency_to_band' break the pattern. Overall, naming is clear and mostly consistent.

Tool Count2/5

45 tools is excessive for typical server usage, risking agent confusion and selection overhead. While the domain is broad, many tools could be consolidated (e.g., merging related limit queries or test planners). This high count likely degrades coherence.

Completeness5/5

The tool set thoroughly covers EMC regulations: limits from major standards (CISPR, FCC, ISED), test methods (automotive, medical, general), certification roadmaps, market-specific requirements, and cross-references. No obvious gaps for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing