fcc_part15_limit
Get FCC Part 15 emission limits for unintentional or intentional radiators at a specified frequency. Choose section and device class to retrieve radiated or conducted limits.
Instructions
Get FCC Part 15 emission limits for a frequency. Returns Class A and/or Class B limits for unintentional radiators (15.109), intentional radiators (15.209), or conducted emissions (15.207).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| frequency_mhz | Yes | Frequency in MHz | |
| section | No | Section to query | |
| device_class | No | Device class |
Implementation Reference
- The handler function `_part15_limit` that executes the fcc_part15_limit tool logic. Looks up FCC Part 15 limits (radiated emissions 15.109, conducted 15.207, intentional radiators 15.209) for a given frequency, device class, and section.
@staticmethod def _part15_limit(arguments: dict[str, Any]) -> list[TextContent]: freq_mhz = arguments["frequency_mhz"] section = arguments.get("section", "all") device_class = arguments.get("device_class", "both") results = [f"FCC Part 15 Limits at {freq_mhz} MHz\n{'=' * 40}"] if section in ["15.109", "all"]: sec_data = PART15_LIMITS.get("section_15_109", {}) results.append(f"\n## Section 15.109 - {sec_data.get('title', 'Radiated Emission Limits')}") if device_class in ["A", "both"]: class_a = sec_data.get("class_a", {}) limit = find_limit_for_frequency(class_a.get("limits", []), freq_mhz) if limit: results.append(f"\nClass A ({class_a.get('description', 'Commercial')}):") results.append(format_limit_result(limit)) if device_class in ["B", "both"]: class_b = sec_data.get("class_b", {}) limit = find_limit_for_frequency(class_b.get("limits", []), freq_mhz) if limit: results.append(f"\nClass B ({class_b.get('description', 'Residential')}):") results.append(format_limit_result(limit)) if section in ["15.207", "all"] and freq_mhz <= 30: sec_data = PART15_LIMITS.get("section_15_207", {}) results.append(f"\n## Section 15.207 - {sec_data.get('title', 'Conducted Limits')}") if device_class in ["A", "both"]: limit = find_limit_for_frequency(sec_data.get("class_a", {}).get("limits", []), freq_mhz) if limit: results.append("\nClass A:") results.append(format_limit_result(limit)) if device_class in ["B", "both"]: limit = find_limit_for_frequency(sec_data.get("class_b", {}).get("limits", []), freq_mhz) if limit: results.append("\nClass B:") results.append(format_limit_result(limit)) if section in ["15.209", "all"]: sec_data = PART15_LIMITS.get("section_15_209", {}) results.append(f"\n## Section 15.209 - {sec_data.get('title', 'Intentional Radiators')}") limit = find_limit_for_frequency(sec_data.get("limits", []), freq_mhz) if limit: results.append(format_limit_result(limit)) restricted = check_restricted_band(freq_mhz) if restricted: results.append(f"\n\u26a0\ufe0f WARNING: {freq_mhz} MHz is in a RESTRICTED BAND (15.205)") results.append(f" {restricted['freq_min_mhz']} - {restricted['freq_max_mhz']} MHz: {restricted['service']}") return [TextContent(type="text", text="\n".join(results))] - Tool registration with input schema for fcc_part15_limit: accepts frequency_mhz (required), section (15.109/15.207/15.209/all), and device_class (A/B/both).
Tool( name="fcc_part15_limit", description="Get FCC Part 15 emission limits for a frequency. Returns Class A and/or Class B limits for unintentional radiators (15.109), intentional radiators (15.209), or conducted emissions (15.207).", inputSchema={ "type": "object", "properties": { "frequency_mhz": {"type": "number", "description": "Frequency in MHz"}, "section": {"type": "string", "enum": ["15.109", "15.207", "15.209", "all"], "description": "Section to query"}, "device_class": {"type": "string", "enum": ["A", "B", "both"], "description": "Device class"}, }, "required": ["frequency_mhz"], }, ), - src/mcp_emc_regulations/tools/fcc.py:133-135 (registration)Routing entry in FCCTools.call_tool that dispatches 'fcc_part15_limit' to _part15_limit handler.
async def call_tool(self, name: str, arguments: dict[str, Any]) -> list[TextContent]: if name == "fcc_part15_limit": return self._part15_limit(arguments) - src/mcp_emc_regulations/tools/fcc.py:38-53 (registration)FCCTools class (ToolModule subclass) with list_tools that registers fcc_part15_limit. Discovered automatically by ToolRegistry.
class FCCTools(ToolModule): def list_tools(self) -> list[Tool]: return [ Tool( name="fcc_part15_limit", description="Get FCC Part 15 emission limits for a frequency. Returns Class A and/or Class B limits for unintentional radiators (15.109), intentional radiators (15.209), or conducted emissions (15.207).", inputSchema={ "type": "object", "properties": { "frequency_mhz": {"type": "number", "description": "Frequency in MHz"}, "section": {"type": "string", "enum": ["15.109", "15.207", "15.209", "all"], "description": "Section to query"}, "device_class": {"type": "string", "enum": ["A", "B", "both"], "description": "Device class"}, }, "required": ["frequency_mhz"], }, ),