get_tax_procedure
Retrieve official French tax procedure information from service-public.fr by specifying the procedure name to understand required steps and documentation.
Instructions
Get information about a tax procedure from service-public.fr
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ctx | No | ||
| procedure_name | Yes |
Implementation Reference
- french_tax_mcp/server.py:403-434 (registration)Registration of the MCP tool 'get_tax_procedure' via @mcp.tool decorator, including a thin wrapper function that delegates to the scraper implementation.@mcp.tool( name="get_tax_procedure", description="Get information about a tax procedure from service-public.fr", ) async def get_tax_procedure_wrapper( procedure_name: str, ctx: Optional[Context] = None, ) -> Optional[Dict]: """Get information about a tax procedure from service-public.fr. Args: procedure_name: Name of the procedure (e.g., 'declaration_revenus', 'credit_impot') ctx: MCP context for logging Returns: Dict: Dictionary containing procedure information """ try: if ctx: await ctx.info(f"Getting tax procedure information for {procedure_name}") from french_tax_mcp.scrapers.service_public_scraper import get_tax_procedure result = await get_tax_procedure(procedure_name) return result except Exception as e: if ctx: await ctx.error(f"Failed to get tax procedure: {e}") return { "status": "error", "message": f"Error getting tax procedure: {str(e)}", }
- Core handler logic: ServicePublicScraper.get_tax_procedure method performs web scraping for the specified tax procedure, maps name to URL, fetches and parses the page, extracts structured info (title, steps, etc.), and formats the result.async def get_tax_procedure(self, procedure_name: str) -> Dict: """Scrape information about a tax procedure from service-public.fr. Args: procedure_name: Name of the procedure (e.g., 'declaration_revenus', 'credit_impot') Returns: Dictionary containing information about the procedure """ logger.info(f"Scraping information for procedure {procedure_name}") try: # Map procedure name to URL url = self._get_procedure_url(procedure_name) if not url: return self.format_result( status="error", message=f"Unknown procedure: {procedure_name}", data={"procedure": procedure_name}, ) # Get the page response = await self.get_page(url) # Parse HTML soup = self.parse_html(response.text) # Extract procedure information procedure_info = self._extract_procedure_info(soup, procedure_name) return self.format_result( status="success", data=procedure_info, message=f"Successfully retrieved information for procedure {procedure_name}", source_url=f"{BASE_URL}{url}", ) except Exception as e: logger.error(f"Error scraping procedure information: {e}") return self.format_result( status="error", message=f"Failed to retrieve procedure information: {str(e)}", data={"procedure": procedure_name}, error=e, )
- Helper wrapper function exported from the scraper module, creating a standalone async function that invokes the singleton scraper instance's method.async def get_tax_procedure(procedure_name: str) -> Dict: """Scrape information about a tax procedure from service-public.fr. Args: procedure_name: Name of the procedure (e.g., 'declaration_revenus', 'credit_impot') Returns: Dictionary containing information about the procedure """ return await service_public_scraper.get_tax_procedure(procedure_name)
- Singleton instance of ServicePublicScraper used by the exported helper function.service_public_scraper = ServicePublicScraper()