Koskamo

LegalOne Entreprises MCP

Provides read-only access to French public company data (SIRENE, RNE, BODACC) and legal notice services. Enables agents to search companies, retrieve official details, list BODACC notices, and assist with legal announcement preparation and pricing.

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.

LegalOne Entreprises MCP logo, by LegalOneVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by LegalOne
MCP endpoint (Streamable HTTP)
https://mcp.legalone.fr/mcp
Vendor documentation

What you can do with it

  • Search for a company by name, SIREN, or SIRET
  • Retrieve official company profile and establishment details
  • List and read BODACC legal notices for a company
  • Calculate legal notice prices and prepare drafts

Source and maintenance

Vendor evidenceRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
LegalOne Entreprises 0.1.0
MCP protocol
2025-06-18
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

LegalOne gives read-only access to public data on French companies from INSEE Sirene, INPI RNE and DILA BODACC, normalizes French postal addresses with the Base Adresse Nationale, and helps with French legal notices: which notices a corporate event requires, their cost set by law, the next steps, and a draft on legalone.fr that the user reviews before publication. Companies are identified by SIREN or SIRET, or found by name with search_companies. Officers are limited to name and role; there is no search of people, no contact details and no financial statements.

Tools

11 advertised

search_companies — Search French companies
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user names a French company (or gives a SIREN or SIRET) and you need to identify it: returns up to 20 matches with name, SIREN, status, legal form code, NAF code and head-office city. Name matching is a prefix match on the official name. Do not use for people, officers or shareholders, and do not use it to list companies by sector or area.

search_companies input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 5,
      "minimum": 1
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "Company name, SIREN or SIRET."
    }
  },
  "additionalProperties": false
}
search_companies annotations
{
  "title": "Search French companies",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_company — Get a French company's profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you know a company's SIREN and the user wants its identity, or wants to pre-fill a business customer's onboarding form: name, active or ceased, legal form code, NAF code, creation date, head office, establishments, share capital and current officers (name and role only), with sources and update date. Do not use for financial statements, beneficial owners, contact details or people searches, or as a regulatory identity check (KYC); that data is not provided.

get_company input schema
{
  "type": "object",
  "required": [
    "siren"
  ],
  "properties": {
    "siren": {
      "type": "string",
      "maxLength": 15,
      "minLength": 9,
      "description": "French company identifier: 9 digits (spaces allowed)."
    }
  },
  "additionalProperties": false
}
get_company annotations
{
  "title": "Get a French company's profile",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_establishment — Get a French establishment by SIRET
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user gives a SIRET (14 digits) and wants that establishment's address, activity code, status and whether it is the head office. Do not use to find all establishments of a company; get_company lists them.

get_establishment input schema
{
  "type": "object",
  "required": [
    "siret"
  ],
  "properties": {
    "siret": {
      "type": "string",
      "maxLength": 20,
      "minLength": 14,
      "description": "14-digit SIRET (spaces allowed)."
    }
  },
  "additionalProperties": false
}
get_establishment annotations
{
  "title": "Get a French establishment by SIRET",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_bodacc_notices — List a company's BODACC notices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks what was officially published about a company (registration, changes, sale of business, insolvency proceedings, removal) and you know its SIREN: returns the latest BODACC notices, newest first, with links to the official text. Do not use to search notices by person, court decision type or region.

list_bodacc_notices input schema
{
  "type": "object",
  "required": [
    "siren"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    },
    "siren": {
      "type": "string",
      "maxLength": 15,
      "minLength": 9,
      "description": "French company identifier: 9 digits (spaces allowed)."
    }
  },
  "additionalProperties": false
}
list_bodacc_notices annotations
{
  "title": "List a company's BODACC notices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_bodacc_notice — Read one BODACC notice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when you have a BODACC notice identifier (for example from list_bodacc_notices) and need its detailed content. Personal details such as birth dates and home addresses are never included. Do not use to look for notices without an identifier.

get_bodacc_notice input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 14,
      "minLength": 10,
      "description": "Notice identifier, e.g. A202601950001."
    }
  },
  "additionalProperties": false
}
get_bodacc_notice annotations
{
  "title": "Read one BODACC notice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_company_documents — List a company's filed documents
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to know which deeds or annual-accounts filings a company has registered (title and dates), with a link to download them from the INPI. Do not use to read financial figures; the documents themselves are not returned.

list_company_documents input schema
{
  "type": "object",
  "required": [
    "siren"
  ],
  "properties": {
    "siren": {
      "type": "string",
      "maxLength": 15,
      "minLength": 9,
      "description": "French company identifier: 9 digits (spaces allowed)."
    }
  },
  "additionalProperties": false
}
list_company_documents annotations
{
  "title": "List a company's filed documents",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_addresses — Normalize a French postal address
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user gives a French postal address, complete or partial, and wants it checked, completed, normalized or geolocated: returns the best Base Adresse Nationale matches with house number, street, postcode, city, INSEE municipality code, coordinates and a match score, plus whether the best match is reliable. Do not use for addresses outside France, for finding who lives or works at an address, or for listing the companies at an address.

search_addresses input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 3,
      "maximum": 10,
      "minimum": 1
    },
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "description": "Postal address, e.g. 8 bd du Port Amiens."
    },
    "postcode": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "Optional 5-digit postcode to narrow the search."
    }
  },
  "additionalProperties": false
}
search_addresses annotations
{
  "title": "Normalize a French postal address",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_legal_notice_price — Get the regulated price of a French legal notice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user asks how much a legal notice (annonce légale) costs for a formality in a French department: returns the exact regulated price excluding and including VAT, set by ministerial order and identical in every authorised newspaper of that department. Notices priced by the character need their text for an exact amount; without it the rate per character is returned. Do not use to compare newspapers or providers: the price is set by law and is the same everywhere.

get_legal_notice_price input schema
{
  "type": "object",
  "required": [
    "formality",
    "department"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 10000,
      "description": "Full text of a notice priced by the character (optional)."
    },
    "formality": {
      "enum": [
        "eurl",
        "sarl",
        "sasu",
        "sas",
        "sa",
        "snc",
        "sc",
        "sci",
        "sccv",
        "scm",
        "scpi",
        "scp",
        "seleurl",
        "selarl",
        "selas",
        "selasu",
        "selafa",
        "modifications-multiples",
        "changement-gerant-president-nomination",
        "transfert-siege-dans-departement",
        "transfert-siege-hors-departement-depart",
        "transfert-siege-hors-departement-arrivee",
        "changement-denomination",
        "modification-objet-social",
        "poursuite-activite-malgre-pertes",
        "modification-capital",
        "transformation-sarl-en-sas",
        "transformation-sas-en-sarl",
        "cession-parts-sociales",
        "transformation-sa-en-sas",
        "prorogation-duree",
        "dissolution-anticipee",
        "cloture-liquidation",
        "dissolution-sans-liquidation-tup",
        "additif",
        "annonce-rectificative",
        "location-gerance",
        "fin-location-gerance",
        "vente-fonds-commerce",
        "apport-fonds-commerce",
        "cession-droit-bail"
      ],
      "type": "string",
      "description": "Formality (form slug), e.g. transfert-siege-dans-departement, sas, dissolution-anticipee."
    },
    "department": {
      "type": "string",
      "pattern": "^(?:\\d{1,3}|2[ABab])$",
      "maxLength": 3,
      "description": "French department code of the registered office: 75, 13, 2A, 974…"
    }
  },
  "additionalProperties": false
}
get_legal_notice_price annotations
{
  "title": "Get the regulated price of a French legal notice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
which_legal_notice — Find which French legal notices a company must publish
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when a French company or its adviser describes a corporate event (creation, registered office transfer within or outside the department, change of manager or president, name, corporate purpose, share capital, legal form, duration, dissolution, liquidation closure, sale of a business…) and needs to know which legal notices are mandatory, how many, in which department, on what legal basis and at what price. The answer comes from a fixed table of rules; when it needs one more fact, it returns a question instead of a guess. Do not use for court-ordered insolvency notices or for legal advice on whether to take the decision.

which_legal_notice input schema
{
  "type": "object",
  "required": [
    "situations"
  ],
  "properties": {
    "legalForm": {
      "enum": [
        "sas",
        "sasu",
        "sarl",
        "eurl",
        "sa",
        "snc",
        "sci",
        "sc",
        "sccv",
        "scm",
        "scp",
        "scpi",
        "selarl",
        "selas",
        "selasu",
        "seleurl",
        "selafa"
      ],
      "type": "string",
      "description": "Current legal form (required for company_creation and legal_form_change)."
    },
    "department": {
      "type": "string",
      "pattern": "^(?:\\d{1,3}|2[ABab])$",
      "maxLength": 3,
      "description": "Department of the registered office (before a transfer)."
    },
    "situations": {
      "type": "array",
      "items": {
        "enum": [
          "company_creation",
          "seat_transfer",
          "officer_change",
          "auditor_change",
          "name_change",
          "corporate_purpose_change",
          "share_capital_change",
          "legal_form_change",
          "duration_extension",
          "share_transfer",
          "continuation_despite_losses",
          "early_dissolution",
          "liquidation_closure",
          "dissolution_without_liquidation",
          "business_sale",
          "business_lease",
          "business_lease_end",
          "dormancy"
        ],
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 1,
      "description": "Events decided together, e.g. [\"seat_transfer\", \"officer_change\"]."
    },
    "newLegalForm": {
      "enum": [
        "sas",
        "sasu",
        "sarl",
        "eurl",
        "sa",
        "snc",
        "sci",
        "sc",
        "sccv",
        "scm",
        "scp",
        "scpi",
        "selarl",
        "selas",
        "selasu",
        "seleurl",
        "selafa"
      ],
      "type": "string",
      "description": "Legal form after a legal_form_change."
    },
    "newDepartment": {
      "type": "string",
      "pattern": "^(?:\\d{1,3}|2[ABab])$",
      "maxLength": 3,
      "description": "Department of the new registered office (seat_transfer)."
    },
    "sameCommercialCourt": {
      "type": "boolean",
      "description": "seat_transfer within one department that has several commercial courts: does the new office depend on the same court?"
    },
    "soleShareholderIsCompany": {
      "type": "boolean",
      "description": "dissolution_without_liquidation: is the sole shareholder a company?"
    }
  },
  "additionalProperties": false
}
which_legal_notice annotations
{
  "title": "Find which French legal notices a company must publish",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_next_steps — Next steps after a French legal notice
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user has published, or is about to publish, a legal notice and asks what comes next: the filing on the one-stop shop for business formalities (guichet unique, INPI), deadlines, what the court registry does (BODACC) and the documents to prepare for that formality. Do not use as a substitute for the official checklist shown by the one-stop shop when filing.

get_next_steps input schema
{
  "type": "object",
  "required": [
    "formality"
  ],
  "properties": {
    "formality": {
      "enum": [
        "transfert-siege-dans-departement",
        "transfert-siege-hors-departement-depart",
        "transfert-siege-hors-departement-arrivee",
        "changement-gerant-president-nomination",
        "changement-denomination",
        "modification-objet-social",
        "modification-capital",
        "prorogation-duree",
        "poursuite-activite-malgre-pertes",
        "dissolution-anticipee",
        "cloture-liquidation",
        "dissolution-sans-liquidation-tup",
        "vente-fonds-commerce",
        "location-gerance",
        "fin-location-gerance",
        "transformation-sarl-en-sas",
        "transformation-sas-en-sarl",
        "transformation-sa-en-sas",
        "sas",
        "sasu",
        "sarl",
        "eurl",
        "sa",
        "snc",
        "selarl",
        "selas",
        "selasu",
        "seleurl",
        "selafa",
        "sci",
        "sc",
        "sccv",
        "scm",
        "scp",
        "scpi"
      ],
      "type": "string",
      "description": "Formality, as returned by which_legal_notice."
    }
  },
  "additionalProperties": false
}
get_next_steps annotations
{
  "title": "Next steps after a French legal notice",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
prepare_legal_notice — Prepare a French legal notice on legalone.fr
Advertised by the server during the last successful anonymous check.
Open-world

Use this when the user wants LegalOne to prepare their legal notice for an existing company (registered office transfer, change of manager or president, name, corporate purpose, share capital, duration, early dissolution, liquidation closure): creates a draft on legalone.fr from the SIREN and the facts the user gave, and returns the notice text, what is left to complete and a link, valid 7 days, that opens the pre-filled form. The user reviews, completes and pays on legalone.fr; nothing is published or paid here. Do not use for a company creation, and do not send home addresses, birth dates or contact details: they are completed on legalone.fr.

prepare_legal_notice input schema
{
  "type": "object",
  "required": [
    "formality",
    "siren"
  ],
  "properties": {
    "siren": {
      "type": "string",
      "maxLength": 15,
      "minLength": 9,
      "description": "SIREN of the company (9 digits, spaces allowed)."
    },
    "newName": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "New company name."
    },
    "formality": {
      "enum": [
        "transfert-siege-dans-departement",
        "transfert-siege-hors-departement-depart",
        "transfert-siege-hors-departement-arrivee",
        "changement-gerant-president-nomination",
        "changement-denomination",
        "modification-objet-social",
        "modification-capital",
        "prorogation-duree",
        "dissolution-anticipee",
        "cloture-liquidation"
      ],
      "type": "string",
      "description": "Formality, as returned by which_legal_notice."
    },
    "department": {
      "type": "string",
      "pattern": "^(?:\\d{1,3}|2[ABab])$",
      "maxLength": 3,
      "description": "Publication department, used only when it cannot be read from the company's registered office (the notice is published where the office is)."
    },
    "newAcronym": {
      "type": "string",
      "maxLength": 50,
      "minLength": 1,
      "description": "New acronym (optional)."
    },
    "newCapital": {
      "type": "number",
      "description": "Share capital after the operation, in euros.",
      "exclusiveMinimum": 0
    },
    "newPurpose": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 1,
      "description": "Corporate purpose as written in the decision."
    },
    "newSeatCity": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "New registered office: city."
    },
    "officerRole": {
      "enum": [
        "manager",
        "president",
        "chief_executive"
      ],
      "type": "string"
    },
    "decisionBody": {
      "enum": [
        "ordinary_general_meeting",
        "extraordinary_general_meeting",
        "combined_general_meeting",
        "manager",
        "board_of_directors",
        "sole_shareholder"
      ],
      "type": "string",
      "description": "Body that took the decision."
    },
    "decisionDate": {
      "type": "string",
      "format": "date",
      "maxLength": 10,
      "description": "Date of the meeting or decision (YYYY-MM-DD)."
    },
    "newSeatCourt": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Commercial court (greffe) of the new registered office, e.g. Nanterre; deduced when the department has one court."
    },
    "capitalChange": {
      "enum": [
        "increase",
        "decrease"
      ],
      "type": "string"
    },
    "effectiveDate": {
      "type": "string",
      "format": "date",
      "maxLength": 10,
      "description": "Date the decision takes effect (YYYY-MM-DD)."
    },
    "newSeatStreet": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "New registered office: number and street."
    },
    "officerChange": {
      "enum": [
        "appointment",
        "replacement",
        "departure"
      ],
      "type": "string",
      "description": "appointment: a new officer without departure; replacement: one leaves, one arrives; departure: one leaves without replacement."
    },
    "purposeChange": {
      "enum": [
        "extension",
        "replacement",
        "removal"
      ],
      "type": "string"
    },
    "departureCause": {
      "enum": [
        "resignation",
        "dismissal",
        "death",
        "end_of_term"
      ],
      "type": "string"
    },
    "liquidationSeat": {
      "enum": [
        "registered_office",
        "liquidator",
        "other"
      ],
      "type": "string",
      "description": "Where the liquidation is based."
    },
    "incomingCivility": {
      "enum": [
        "mr",
        "mrs"
      ],
      "type": "string"
    },
    "incomingLastName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "newDurationYears": {
      "type": "integer",
      "maximum": 99,
      "minimum": 1,
      "description": "New company duration in years."
    },
    "departingCivility": {
      "enum": [
        "mr",
        "mrs"
      ],
      "type": "string"
    },
    "departingLastName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "incomingFirstName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "newSeatComplement": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "New registered office: building, floor (optional)."
    },
    "newSeatPostalCode": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "maxLength": 5,
      "description": "New registered office: 5-digit postcode."
    },
    "contributionNature": {
      "enum": [
        "cash",
        "shareholder_current_account",
        "reserves",
        "real_estate",
        "business",
        "securities"
      ],
      "type": "string"
    },
    "departingFirstName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "liquidatorCivility": {
      "enum": [
        "mr",
        "mrs"
      ],
      "type": "string"
    },
    "liquidatorLastName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "representativeRole": {
      "enum": [
        "manager",
        "president"
      ],
      "type": "string",
      "description": "Role of the legal representative named in the arrival notice."
    },
    "liquidatorFirstName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "companyDurationYears": {
      "type": "integer",
      "maximum": 99,
      "minimum": 1,
      "description": "Company duration in years, as in the articles of association."
    },
    "representativeCivility": {
      "enum": [
        "mr",
        "mrs"
      ],
      "type": "string"
    },
    "representativeLastName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    },
    "representativeFirstName": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
prepare_legal_notice annotations
{
  "title": "Prepare a French legal notice on legalone.fr",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
1124 ms
95th percentile latency
1124 ms

Maintenance history

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

  • · probe · passed · 1124 ms · metadata changed · 11 tool(s)

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 legalone-entreprises-mcp https://mcp.legalone.fr/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 legalone-entreprises-mcp --url https://mcp.legalone.fr/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start legalone-entreprises-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "legalone-entreprises-mcp": {
      "type": "http",
      "url": "https://mcp.legalone.fr/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 legalone-entreprises-mcp https://mcp.legalone.fr/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "legalone-entreprises-mcp": {
      "url": "https://mcp.legalone.fr/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": {
    "legalone-entreprises-mcp": {
      "serverUrl": "https://mcp.legalone.fr/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run LegalOne Entreprises MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing