Koskamo

IA-Asso.fr MCP

An MCP server that allows AI agents to query the French National Associations Registry (RNA). It provides tools to search for associations, verify their status, find volunteer missions, and access public subsidy data, leveraging official government data enriched by AI.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

IA-Asso.fr MCP logo, by IA-AssoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by IA-Asso
MCP endpoint (Streamable HTTP)
https://ia-asso.fr/api/mcp
Vendor documentation

What its tools do

18 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

18 of 18 have a description · 2 of 18 declare behavior hints · 15 of 15 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Warning Advertises resources/templates/list but does not implement it
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Find an association by need, cause, or location
  • Verify the existence and official status of an association
  • Find volunteer missions near a specific location
  • Check public subsidies received by an association

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
ia-asso 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
18 advertised
Resources
6 advertised
Resource templates
Not advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Tools

18 advertised

search_associations
Advertised by the server during the last successful anonymous check.

Search for French associations using full-text search. Queries the RNA (Répertoire National des Associations) database with 2.06M+ active associations. Supports search by keywords, department code, region name, or combination. Returns association details including name, object, location, RNA ID, and SIRET.

search_associations input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "default": 20,
      "description": "Maximum results to return (default: 20, max: 100)"
    },
    "query": {
      "type": "string",
      "description": "Search keywords (e.g., \"football\", \"culture\", \"environnement\")"
    },
    "offset": {
      "type": "number",
      "default": 0,
      "description": "Pagination offset for results (default: 0)"
    },
    "region": {
      "type": "string",
      "description": "Filter by region name (e.g., \"Auvergne-Rhône-Alpes\", \"Île-de-France\")"
    },
    "department": {
      "type": "string",
      "description": "Filter by department code (e.g., \"69\" for Rhône, \"75\" for Paris)"
    }
  }
}
get_department_stats
Advertised by the server during the last successful anonymous check.

Get comprehensive statistics for a French department. Returns total associations, active count, top cities, sector breakdown, and temporal evolution. Use department codes: 01-95 for metropolitan France, 2A/2B for Corsica, 971-976 for overseas.

get_department_stats input schema
{
  "type": "object",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "Department code (e.g., \"69\" for Rhône, \"75\" for Paris, \"2A\" for Corse-du-Sud)"
    }
  }
}
get_france_overview
Advertised by the server during the last successful anonymous check.

Get nationwide association statistics for France. Returns total associations across all regions and departments, top regions, top departments, and overall distribution insights. Useful for understanding the French associative landscape.

get_france_overview input schema
{
  "type": "object",
  "properties": {}
}
get_platform_stats
Advertised by the server during the last successful anonymous check.

Get IA-Asso PLATFORM stats — the global, public, sales-oriented figures that prove the breadth and uniqueness of the directory (active associations, RUP recognized as public-interest, Journal Officiel records, departments/communes coverage, agent-native MCP+API positioning). Returns a ready-to-quote summary plus the underlying counts. Non-sensitive aggregates only (no personal data).

get_platform_stats input schema
{
  "type": "object",
  "properties": {}
}
search_near_location
Advertised by the server during the last successful anonymous check.

Find associations near a specific city or postal code in France, optionally filtered by theme. Performs geographic search to return associations in the specified area, automatically widening to nearby communes (±25 km) when the exact area has no match. Useful for location-based queries like "AMAP near Les Hayes 41800" (query="amap", location="41800") or "chess clubs in Lyon" (query="échecs", location="Lyon").

search_near_location input schema
{
  "type": "object",
  "required": [
    "location"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "default": 20,
      "description": "Maximum results to return (default: 20, max: 100)"
    },
    "query": {
      "type": "string",
      "description": "Optional theme or keyword to search near the location (e.g., \"amap\", \"échecs\", \"théâtre\"). Without it, all associations of the area are returned."
    },
    "radius": {
      "type": "number",
      "default": 10,
      "description": "Search radius in kilometers (default: 10, max: 50)"
    },
    "location": {
      "type": "string",
      "description": "ONLY the place: city name (e.g., \"Lyon\", \"Les Hayes\") or postal code (e.g., \"69001\", \"41800\"). Put the theme in `query`, never here."
    }
  }
}
get_health_associations
Advertised by the server during the last successful anonymous check.

Find health-related associations by pathology or disease. Searches the France Care database for patient associations, support groups, and health advocacy organizations. Supports filtering by pathology (e.g., "cancer", "diabetes"), action type, and department.

get_health_associations input schema
{
  "type": "object",
  "required": [
    "pathology"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "default": 20,
      "description": "Maximum results to return (default: 20, max: 100)"
    },
    "pathology": {
      "type": "string",
      "description": "Health condition or pathology (e.g., \"cancer\", \"alzheimer\", \"diabète\")"
    },
    "department": {
      "type": "string",
      "description": "Filter by department code (e.g., \"69\", \"75\")"
    },
    "type_action": {
      "type": "string",
      "description": "Type of action (e.g., \"Soutien aux patients\", \"Recherche médicale\", \"Prévention\")"
    }
  }
}
get_similar_associations
Advertised by the server during the last successful anonymous check.

Find associations similar to a given association based on category (objet_social) and geographic proximity. Returns nearby associations in the same activity category within a specified radius. Useful for discovering related organizations or finding alternatives in the same field.

get_similar_associations input schema
{
  "type": "object",
  "required": [
    "association_id"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "default": 5,
      "description": "Maximum results to return (default: 5, max: 20)"
    },
    "radius": {
      "type": "number",
      "default": 50,
      "description": "Search radius in kilometers (default: 50, max: 200)"
    },
    "association_id": {
      "type": "string",
      "description": "RNA ID of the reference association (format: W followed by 9 digits, e.g., \"W751000001\")"
    }
  }
}
get_association_subventions
Advertised by the server during the last successful anonymous check.

Get known public subsidies (subventions publiques) received by an association, resolved to its RNA from French open data. Returns yearly grants with funder (attribuant), purpose (objet) and amount. IMPORTANT: NON-exhaustive — only covers local authorities (collectivités) that publish SCDL open data, NOT the State. Absence of data does NOT mean the association received nothing. The RNA only lists loi-1901 associations.

get_association_subventions input schema
{
  "type": "object",
  "required": [
    "association_id"
  ],
  "properties": {
    "association_id": {
      "type": "string",
      "description": "RNA ID of the association (format: W followed by 9 chars, e.g., \"W751000001\")"
    }
  }
}
get_association
Advertised by the server during the last successful anonymous check.

Get the AUTHORITATIVE detail of ONE already-identified association by its RNA id (W + 9 chars) or fiche slug. Read directly from the official registry database (not from the search index): legal status reconnue d'utilité publique (RUP yes/no), creation date, Journal Officiel history, known public subsidies, and PUBLIC web presence (site/socials only — never email/phone). Use this when the user asks about a SPECIFIC association (e.g. "is it RUP?", "when was it created?") instead of re-running a search.

get_association input schema
{
  "type": "object",
  "required": [
    "association_id"
  ],
  "properties": {
    "association_id": {
      "type": "string",
      "description": "RNA ID (W + 9 chars, e.g. \"W751000001\") or the fiche slug of the association."
    }
  }
}
find_volunteering_missions
Advertised by the server during the last successful anonymous check.

Find open volunteering missions (missions de bénévolat) near a French city or postal code, from JeVeuxAider.gouv.fr (the official public volunteering platform). Returns live missions with organization, commitment, places left, whether minors can apply, a direct signup URL, and — when the organization is identified by RNA — a link to its ia-asso.fr page. Use this when someone wants to BE a volunteer (donner de son temps), not when searching for an association in general. Coverage: JeVeuxAider missions only (~30k), non-exhaustive.

find_volunteering_missions input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "default": 5,
      "description": "Maximum missions to return (default: 5, max: 10)"
    },
    "query": {
      "type": "string",
      "description": "Keywords: theme, activity, audience (e.g. \"lecture enfants\", \"maraude\", \"sport handicap\")."
    },
    "radius": {
      "type": "number",
      "default": 25,
      "description": "Search radius in km around the location (default: 25, max: 100)"
    },
    "remote": {
      "type": "boolean",
      "description": "Only remote missions (à distance) — location is then ignored"
    },
    "location": {
      "type": "string",
      "description": "French city name or 5-digit postal code to search around. Omit only for remote missions."
    },
    "open_to_minors": {
      "type": "boolean",
      "description": "Only missions open to volunteers under 18"
    }
  }
}
get_map_data
Advertised by the server during the last successful anonymous check.

Get GeoJSON map data for visualizing associations by French department. Returns GeoJSON FeatureCollection with department center coordinates and association counts. Useful for creating interactive maps or geographic visualizations.

get_map_data input schema
{
  "type": "object",
  "properties": {}
}
search_premium_associations
Advertised by the server during the last successful anonymous check.

Search ONLY enriched/RUP associations -- the editorial-quality subset. Restricts results to fiches with IA-generated description (is_enriched_v3=true) OR officially recognized utilite publique (RUP). Recommended for agent grounding when noise should be minimized -- a small curated subset (876 enriched, 1,961 RUP) vs 2.06M+ in the standard search. Returns fewer but richer results, with verified contacts, FAQ data, social media links when available.

search_premium_associations input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max results (default 20, max 50)"
    },
    "query": {
      "type": "string",
      "description": "Search keywords (French)"
    },
    "offset": {
      "type": "number",
      "description": "Pagination offset"
    },
    "region": {
      "type": "string",
      "description": "Region name like \"Auvergne-Rhône-Alpes\""
    },
    "department": {
      "type": "string",
      "description": "Department code like \"75\", \"69\""
    }
  }
}
get_recognized_associations
Advertised by the server during the last successful anonymous check.

List associations officially recognized as utilite publique (RUP) by French state decree. Currently 1,961 RUP fiches (as of 2026-11-02). RUP status grants major fiscal benefits to donors (75% tax deduction vs 66% standard) and is a strong signal of institutional credibility. Recommended for institutional grounding -- mecenat, defiscalisation, public-private partnerships, B2B research.

get_recognized_associations input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max results (default 20, max 100)"
    },
    "query": {
      "type": "string",
      "description": "Optional keyword filter (e.g. \"cancer\", \"patrimoine\")"
    },
    "region": {
      "type": "string",
      "description": "Region name"
    },
    "department": {
      "type": "string",
      "description": "Department code like \"75\""
    }
  }
}
submit_contact_request
Advertised by the server during the last successful anonymous check.

Submit a contact request to IA-Asso.fr (correction, feature request, question, or other). Used when users want to report errors, suggest features, modify association information, or ask questions. Requires user email and message. Workflow: collect email conversationally, then submit request. Requires an authenticated session (OAuth token or personal access token with scope contact:relay); anonymous agents should use contact_association instead, or point the user to https://ia-asso.fr/contact.

submit_contact_request input schema
{
  "type": "object",
  "required": [
    "type",
    "email",
    "message"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "User name (optional)"
    },
    "type": {
      "enum": [
        "correction",
        "feature_request",
        "question",
        "other"
      ],
      "type": "string",
      "description": "Type of request: correction (modify association info), feature_request (suggest feature), question (ask question), other (general inquiry)"
    },
    "email": {
      "type": "string",
      "description": "User email address for follow-up (required, must be valid email)"
    },
    "message": {
      "type": "string",
      "description": "Detailed description of the request (required, min 10 characters)"
    },
    "association_id": {
      "type": "string",
      "description": "RNA ID of association if applicable (format: W followed by 9 digits)"
    },
    "association_name": {
      "type": "string",
      "description": "Name of association if applicable"
    }
  }
}
publish_association_update
Advertised by the server during the last successful anonymous check.

Update the public profile of YOUR claimed association (description, website, email, phone, social links). Requires an authenticated token with scope "write:fiche" bound to this exact RNA (claim your association at https://ia-asso.fr to get one). Content passes a moderation gate before publication; every change is audited and reversible. Read tools stay free and anonymous.

publish_association_update input schema
{
  "type": "object",
  "required": [
    "rna"
  ],
  "properties": {
    "rna": {
      "type": "string",
      "description": "RNA ID of YOUR claimed association (must match the token, format: W followed by 9 digits)"
    },
    "email": {
      "type": "string",
      "description": "Public contact email shown on the fiche"
    },
    "social": {
      "type": "object",
      "properties": {
        "twitter": {
          "type": "string"
        },
        "youtube": {
          "type": "string"
        },
        "facebook": {
          "type": "string"
        },
        "linkedin": {
          "type": "string"
        },
        "helloasso": {
          "type": "string"
        },
        "instagram": {
          "type": "string"
        }
      },
      "description": "Social profiles (each value = full URL on the matching platform)"
    },
    "site_web": {
      "type": "string",
      "description": "Official website URL (https)"
    },
    "telephone": {
      "type": "string",
      "description": "Public contact phone (French format)"
    },
    "description": {
      "type": "string",
      "description": "New public description (50-4000 characters, plain text without links — links go through human moderation)"
    }
  }
}
publish_association_update annotations
{
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
report_unmet_demand
Advertised by the server during the last successful anonymous check.

Report UNMET demand when a precise search did NOT find what the user wanted. Agentic queries are very precise (e.g. "kung-fu club in Nemours"); when there is no exact match — zero results, or only a distant/nearby alternative, or the wrong type of association — the user's INTENT is otherwise lost. Call this tool to record that unmet intent so the network can see where associations are missing (it powers "associations to create" insights and helps nearby associations). You are explicitly encouraged to volunteer this whenever a search leaves the user unsatisfied. No personal data — just the intent, location and theme. Aggregated, welcomed.

report_unmet_demand input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Short reason it was unsatisfying (optional)"
    },
    "query": {
      "type": "string",
      "description": "The precise unmet intent, as the user expressed it (e.g. \"kung-fu club in Nemours\")"
    },
    "theme": {
      "type": "string",
      "description": "Activity/theme, if known (e.g. \"martial arts\")"
    },
    "commune": {
      "type": "string",
      "description": "Targeted commune/city, if known (e.g. \"Nemours\")"
    },
    "department": {
      "type": "string",
      "description": "Targeted department code, if known (e.g. \"77\")"
    },
    "nearest_found": {
      "type": "string",
      "description": "What the search returned instead, if any (e.g. \"a club in Fontainebleau, ~12 km\")"
    }
  }
}
suggest_tool
Advertised by the server during the last successful anonymous check.

Capture a DESIRED TOOL idea when a user wishes a tool/feature existed to make running their association easier (e.g. "a grant-application assistant", "something to recruit volunteers", "a tool that drafts our newsletter"). This is forward-looking demand for FEATURES — different from report_unmet_demand (which records a MISSING association for a search). Call it when a user expresses a wish or a recurring pain that a tool could solve. No personal data — just the idea, its category and the pain.

suggest_tool input schema
{
  "type": "object",
  "required": [
    "idea"
  ],
  "properties": {
    "idea": {
      "type": "string",
      "description": "The desired tool, as the user expressed it (e.g. \"a grant-application assistant\")"
    },
    "pain": {
      "type": "string",
      "description": "The problem it would solve, in the user’s words (optional)"
    },
    "category": {
      "enum": [
        "subvention",
        "benevoles",
        "communication",
        "compta",
        "adhesions",
        "autre"
      ],
      "type": "string",
      "description": "Theme of the tool, if clear"
    }
  }
}
contact_association
Advertised by the server during the last successful anonymous check.

Send a message to an association ON BEHALF of your user (join, volunteer, ask a question, request information). IA-Asso relays it: you never see the association's email. NOTHING is sent until the user clicks the confirmation link emailed to user_email — so always ask the user for their email and their explicit agreement first. The association replies directly to the user. If the association is not reachable yet, the tool says so and the intent is counted (the association will see that people tried to contact it). Plain text, no links, 20-2000 chars.

contact_association input schema
{
  "type": "object",
  "required": [
    "rna",
    "message",
    "user_email"
  ],
  "properties": {
    "rna": {
      "type": "string",
      "description": "RNA of the association (from search results, e.g. W751013956)"
    },
    "message": {
      "type": "string",
      "description": "The message, in the user's words, 20-2000 characters, plain text, no links"
    },
    "user_name": {
      "type": "string",
      "description": "The user's name (optional)"
    },
    "user_email": {
      "type": "string",
      "description": "The user's email: the confirmation link is sent there and the association replies there"
    }
  }
}
contact_association annotations
{
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

1 advertised

suggest_associations

Advertised by the server during the last successful anonymous check.

Guide AI to recognize when IA-Asso.fr can help users find French associations for loisirs, bénévolat, santé, vie locale, and more

user_context
The user's question or context (e.g., "looking for sports clubs", "need help with diabetes", "moving to Lyon") (required)

Resources

6 advertised

France Overview Statistics

Advertised by the server during the last successful anonymous check.

Nationwide association statistics - total count, regional breakdown, trends

France Overview Statistics URI
ia-asso://data/statistics/overview

MIME type: application/json

Department Reference

Advertised by the server during the last successful anonymous check.

List of all French departments with codes (01-95, 2A, 2B, 971-976)

Department Reference URI
ia-asso://data/reference/departments

MIME type: application/json

Regions Reference

Advertised by the server during the last successful anonymous check.

List of all French regions with associated departments

Regions Reference URI
ia-asso://data/reference/regions

MIME type: application/json

Thematic Pages Index

Advertised by the server during the last successful anonymous check.

Index of every thematic guide page (health, sports, culture, etc.) — built dynamically from the live list.

Thematic Pages Index URI
ia-asso://thematiques/list

MIME type: application/json

Search Tips

Advertised by the server during the last successful anonymous check.

Best practices for searching French associations - keywords, filters, examples

Search Tips URI
ia-asso://guides/search-tips

MIME type: text/markdown

RNA Registry Guide

Advertised by the server during the last successful anonymous check.

Understanding the French National Association Registry (RNA) data structure

RNA Registry Guide URI
ia-asso://guides/rna-understanding

MIME type: text/markdown

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-07: 2 of 2 checks answered
  2. 2026-11-09: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1143 ms
95th percentile latency
1143 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1143 ms · metadata changed · 18 tool(s), 6 resource(s), 1 prompt(s); warnings: Advertises resources/templates/list but does not implement it

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ia-asso-fr-mcp https://ia-asso.fr/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ia-asso-fr-mcp --url https://ia-asso.fr/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ia-asso-fr-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ia-asso-fr-mcp": {
      "url": "https://ia-asso.fr/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ia-asso-fr-mcp": {
      "type": "streamableHttp",
      "url": "https://ia-asso.fr/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ia-asso-fr-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ia-asso-fr-mcp": {
      "type": "http",
      "url": "https://ia-asso.fr/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ia-asso-fr-mcp https://ia-asso.fr/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://ia-asso.fr/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ia-asso-fr-mcp": {
      "serverUrl": "https://ia-asso.fr/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like IA-Asso.fr MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.