{
  "name": "RESAMA WebMCP",
  "version": "1.0.0",
  "description": "Browser-native tools for discovering public RESAMA content, presentations, and active job offers.",
  "homepage": "https://www.resama.fr/",
  "execution": {
    "type": "browser",
    "api": "document.modelContext",
    "requiresActiveDocument": true
  },
  "tools": [
    {
      "name": "find_resama_presentations",
      "description": "Finds public RESAMA Days presentations by topic, author, year, abstract availability, or archived slides.",
      "availability": { "paths": ["/*"] },
      "annotations": { "readOnlyHint": true, "untrustedContentHint": false },
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1, "maxLength": 160, "description": "Topic or words in the title, session, or abstract." },
          "author": { "type": "string", "minLength": 1, "maxLength": 120, "description": "Full or partial author name." },
          "year": { "type": "integer", "minimum": 2016, "maximum": 2100, "description": "RESAMA Days year." },
          "hasAbstract": { "type": "boolean", "description": "Only return presentations with or without an abstract in the requested language." },
          "hasSlides": { "type": "boolean", "description": "Only return presentations with or without archived slides." },
          "lang": { "type": "string", "enum": ["fr", "en"], "description": "Content language." },
          "limit": { "type": "integer", "minimum": 1, "maximum": 5, "default": 5, "description": "Maximum results." }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "list_active_jobs",
      "description": "Lists active job offers shared publicly by RESAMA.",
      "availability": { "paths": ["/*"] },
      "annotations": { "readOnlyHint": true, "untrustedContentHint": false },
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1, "maxLength": 160, "description": "Words in the French offer title, location, or job type." },
          "location": { "type": "string", "minLength": 1, "maxLength": 120, "description": "Full or partial location." },
          "jobType": { "type": "string", "minLength": 1, "maxLength": 120, "description": "Full or partial French job type." },
          "limit": { "type": "integer", "minimum": 1, "maximum": 5, "default": 5, "description": "Maximum results." }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "search_resama",
      "description": "Searches RESAMA public, indexable content in French or English.",
      "availability": { "paths": ["/*"] },
      "annotations": { "readOnlyHint": true, "untrustedContentHint": false },
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1, "maxLength": 160, "description": "Search words or phrase." },
          "lang": { "type": "string", "enum": ["fr", "en"], "description": "Content language." },
          "types": { "type": "array", "maxItems": 5, "uniqueItems": true, "items": { "type": "string", "enum": ["page", "news", "resource", "organism", "presentation"] }, "description": "Content types." },
          "year": { "type": "integer", "minimum": 2012, "maximum": 2100, "description": "Publication or presentation year." },
          "limit": { "type": "integer", "minimum": 1, "maximum": 5, "default": 5, "description": "Maximum results." }
        },
        "required": ["query"],
        "additionalProperties": false
      }
    }
  ]
}
