@altura_ma/onemcp 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +100 -77
  3. package/dist/api/keys.d.ts +30 -0
  4. package/dist/api/keys.d.ts.map +1 -0
  5. package/dist/api/keys.js +98 -0
  6. package/dist/api/keys.js.map +1 -0
  7. package/dist/api/openapi.d.ts +4 -0
  8. package/dist/api/openapi.d.ts.map +1 -0
  9. package/dist/api/openapi.js +108 -0
  10. package/dist/api/openapi.js.map +1 -0
  11. package/dist/api/rest.d.ts +4 -0
  12. package/dist/api/rest.d.ts.map +1 -0
  13. package/dist/api/rest.js +143 -0
  14. package/dist/api/rest.js.map +1 -0
  15. package/dist/api/status.d.ts +46 -0
  16. package/dist/api/status.d.ts.map +1 -0
  17. package/dist/api/status.js +44 -0
  18. package/dist/api/status.js.map +1 -0
  19. package/dist/cache/index.d.ts.map +1 -1
  20. package/dist/cache/index.js +2 -1
  21. package/dist/cache/index.js.map +1 -1
  22. package/dist/connectors/base.d.ts +2 -0
  23. package/dist/connectors/base.d.ts.map +1 -1
  24. package/dist/connectors/base.js +19 -2
  25. package/dist/connectors/base.js.map +1 -1
  26. package/dist/connectors/bodacc.d.ts +3 -2
  27. package/dist/connectors/bodacc.d.ts.map +1 -1
  28. package/dist/connectors/bodacc.js +17 -4
  29. package/dist/connectors/bodacc.js.map +1 -1
  30. package/dist/connectors/dvf.d.ts +0 -4
  31. package/dist/connectors/dvf.d.ts.map +1 -1
  32. package/dist/connectors/dvf.js +13 -10
  33. package/dist/connectors/dvf.js.map +1 -1
  34. package/dist/connectors/georisques.d.ts.map +1 -1
  35. package/dist/connectors/georisques.js +16 -27
  36. package/dist/connectors/georisques.js.map +1 -1
  37. package/dist/connectors/index.d.ts +3 -1
  38. package/dist/connectors/index.d.ts.map +1 -1
  39. package/dist/connectors/index.js +3 -1
  40. package/dist/connectors/index.js.map +1 -1
  41. package/dist/connectors/inpi-rne.d.ts.map +1 -1
  42. package/dist/connectors/inpi-rne.js +15 -8
  43. package/dist/connectors/inpi-rne.js.map +1 -1
  44. package/dist/connectors/insee-sirene.d.ts.map +1 -1
  45. package/dist/connectors/insee-sirene.js +7 -2
  46. package/dist/connectors/insee-sirene.js.map +1 -1
  47. package/dist/connectors/legifrance.d.ts +69 -0
  48. package/dist/connectors/legifrance.d.ts.map +1 -0
  49. package/dist/connectors/legifrance.js +137 -0
  50. package/dist/connectors/legifrance.js.map +1 -0
  51. package/dist/connectors/recherche-entreprises.d.ts +1 -0
  52. package/dist/connectors/recherche-entreprises.d.ts.map +1 -1
  53. package/dist/connectors/recherche-entreprises.js +4 -1
  54. package/dist/connectors/recherche-entreprises.js.map +1 -1
  55. package/dist/http.js +65 -5
  56. package/dist/http.js.map +1 -1
  57. package/dist/index.js +8 -2
  58. package/dist/index.js.map +1 -1
  59. package/dist/schemas/canonical.d.ts +28 -0
  60. package/dist/schemas/canonical.d.ts.map +1 -1
  61. package/dist/schemas/canonical.js +1 -0
  62. package/dist/schemas/canonical.js.map +1 -1
  63. package/dist/server.d.ts +2 -2
  64. package/dist/server.d.ts.map +1 -1
  65. package/dist/server.js +21 -68
  66. package/dist/server.js.map +1 -1
  67. package/dist/tools/admin-geo.d.ts.map +1 -1
  68. package/dist/tools/admin-geo.js +40 -0
  69. package/dist/tools/admin-geo.js.map +1 -1
  70. package/dist/tools/area-intel.d.ts +3 -0
  71. package/dist/tools/area-intel.d.ts.map +1 -0
  72. package/dist/tools/area-intel.js +109 -0
  73. package/dist/tools/area-intel.js.map +1 -0
  74. package/dist/tools/company-layer2.d.ts.map +1 -1
  75. package/dist/tools/company-layer2.js +7 -0
  76. package/dist/tools/company-layer2.js.map +1 -1
  77. package/dist/tools/company.d.ts.map +1 -1
  78. package/dist/tools/company.js +79 -3
  79. package/dist/tools/company.js.map +1 -1
  80. package/dist/tools/compound.d.ts +3 -0
  81. package/dist/tools/compound.d.ts.map +1 -0
  82. package/dist/tools/compound.js +108 -0
  83. package/dist/tools/compound.js.map +1 -0
  84. package/dist/tools/geo.d.ts.map +1 -1
  85. package/dist/tools/geo.js +70 -3
  86. package/dist/tools/geo.js.map +1 -1
  87. package/dist/tools/guide.d.ts +3 -0
  88. package/dist/tools/guide.d.ts.map +1 -0
  89. package/dist/tools/guide.js +228 -0
  90. package/dist/tools/guide.js.map +1 -0
  91. package/dist/tools/identity.d.ts.map +1 -1
  92. package/dist/tools/identity.js +29 -1
  93. package/dist/tools/identity.js.map +1 -1
  94. package/dist/tools/index.d.ts +5 -1
  95. package/dist/tools/index.d.ts.map +1 -1
  96. package/dist/tools/index.js +9 -1
  97. package/dist/tools/index.js.map +1 -1
  98. package/dist/tools/legal-texts.d.ts +3 -0
  99. package/dist/tools/legal-texts.d.ts.map +1 -0
  100. package/dist/tools/legal-texts.js +95 -0
  101. package/dist/tools/legal-texts.js.map +1 -0
  102. package/dist/tools/legal.d.ts.map +1 -1
  103. package/dist/tools/legal.js +10 -2
  104. package/dist/tools/legal.js.map +1 -1
  105. package/dist/tools/public-contracts.d.ts.map +1 -1
  106. package/dist/tools/public-contracts.js +9 -2
  107. package/dist/tools/public-contracts.js.map +1 -1
  108. package/dist/tools/realestate.d.ts.map +1 -1
  109. package/dist/tools/realestate.js +64 -6
  110. package/dist/tools/realestate.js.map +1 -1
  111. package/dist/tools/sources.d.ts.map +1 -1
  112. package/dist/tools/sources.js +60 -2
  113. package/dist/tools/sources.js.map +1 -1
  114. package/dist/utils/byok.d.ts +49 -0
  115. package/dist/utils/byok.d.ts.map +1 -0
  116. package/dist/utils/byok.js +28 -0
  117. package/dist/utils/byok.js.map +1 -0
  118. package/dist/utils/circuit-breaker.d.ts +19 -0
  119. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  120. package/dist/utils/circuit-breaker.js +43 -0
  121. package/dist/utils/circuit-breaker.js.map +1 -0
  122. package/dist/utils/env.d.ts +2 -1
  123. package/dist/utils/env.d.ts.map +1 -1
  124. package/dist/utils/env.js +14 -7
  125. package/dist/utils/env.js.map +1 -1
  126. package/dist/utils/http.d.ts.map +1 -1
  127. package/dist/utils/http.js +7 -2
  128. package/dist/utils/http.js.map +1 -1
  129. package/dist/utils/oauth.d.ts.map +1 -1
  130. package/dist/utils/oauth.js +8 -3
  131. package/dist/utils/oauth.js.map +1 -1
  132. package/dist/utils/siren.d.ts +4 -0
  133. package/dist/utils/siren.d.ts.map +1 -0
  134. package/dist/utils/siren.js +36 -0
  135. package/dist/utils/siren.js.map +1 -0
  136. package/dist/utils/zod-to-json.d.ts +3 -0
  137. package/dist/utils/zod-to-json.d.ts.map +1 -0
  138. package/dist/utils/zod-to-json.js +46 -0
  139. package/dist/utils/zod-to-json.js.map +1 -0
  140. package/package.json +7 -4
  141. package/dist/worker.d.ts +0 -16
  142. package/dist/worker.d.ts.map +0 -1
  143. package/dist/worker.js +0 -185
  144. package/dist/worker.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { connectors } from "../connectors/index.js";
3
+ import { isValidSiren, isValidSiret } from "../utils/siren.js";
3
4
  import { defineTool } from "./types.js";
4
5
  const companySearch = defineTool({
5
6
  name: "company_search",
@@ -19,21 +20,42 @@ const companySearch = defineTool({
19
20
  .regex(/^\d{2,3}[A-Z]?$/)
20
21
  .optional()
21
22
  .describe("Code département (ex: 75, 13, 2A, 974)."),
23
+ region: z
24
+ .string()
25
+ .regex(/^\d{2}$/)
26
+ .optional()
27
+ .describe("Code région INSEE (ex: 11=Île-de-France, 84=Auvergne-Rhône-Alpes, 93=PACA)."),
22
28
  naf: z
23
29
  .string()
24
30
  .optional()
25
31
  .describe("Code NAF/APE pour filtrer par activité (ex: 62.01Z pour développement informatique)."),
26
32
  active_only: z.boolean().default(true).optional(),
33
+ is_active: z
34
+ .boolean()
35
+ .optional()
36
+ .describe("Filtrer les entreprises actives uniquement (true) ou inactives (false). " +
37
+ "Surcharge active_only si fourni. L'API passe etat_administratif=A pour les actives."),
27
38
  }),
28
39
  handler: async (input) => {
29
- return connectors.rechercheEntreprises.search({
40
+ const activeOnly = input.is_active !== undefined ? input.is_active : (input.active_only ?? true);
41
+ const result = await connectors.rechercheEntreprises.search({
30
42
  query: input.query,
31
43
  page: input.page,
32
44
  perPage: input.per_page,
33
45
  departement: input.departement,
46
+ region: input.region,
34
47
  naf: input.naf,
35
- activeOnly: input.active_only ?? true,
48
+ activeOnly,
36
49
  });
50
+ const currentPage = result.page ?? input.page ?? 1;
51
+ const perPage = result.per_page ?? input.per_page ?? 10;
52
+ return {
53
+ ...result,
54
+ total_results: result.total,
55
+ page: currentPage,
56
+ per_page: perPage,
57
+ has_more: result.total > currentPage * perPage,
58
+ };
37
59
  },
38
60
  });
39
61
  const companyGet = defineTool({
@@ -49,11 +71,15 @@ const companyGet = defineTool({
49
71
  }),
50
72
  handler: async (input) => {
51
73
  if (input.identifier.length === 9) {
74
+ if (!isValidSiren(input.identifier))
75
+ return { found: false, identifier: input.identifier, reason: "SIREN invalide (checksum Luhn échoué)" };
52
76
  const result = await connectors.rechercheEntreprises.getBySiren(input.identifier);
53
77
  if (!result)
54
78
  return { found: false, identifier: input.identifier };
55
79
  return { found: true, ...result };
56
80
  }
81
+ if (!isValidSiret(input.identifier))
82
+ return { found: false, identifier: input.identifier, reason: "SIRET invalide (checksum Luhn échoué)" };
57
83
  const result = await connectors.rechercheEntreprises.getBySiret(input.identifier);
58
84
  if (!result)
59
85
  return { found: false, identifier: input.identifier };
@@ -72,6 +98,8 @@ const companyEnrich = defineTool({
72
98
  legal_announcements_limit: z.number().int().min(1).max(100).default(20).optional(),
73
99
  }),
74
100
  handler: async (input) => {
101
+ if (!isValidSiren(input.siren))
102
+ return { found: false, siren: input.siren, reason: "SIREN invalide (checksum Luhn échoué)" };
75
103
  const company = await connectors.rechercheEntreprises.getBySiren(input.siren);
76
104
  if (!company)
77
105
  return { found: false, siren: input.siren };
@@ -115,5 +143,53 @@ const companyEnrich = defineTool({
115
143
  return result;
116
144
  },
117
145
  });
118
- export const companyTools = [companySearch, companyGet, companyEnrich];
146
+ const companyFinancialHistory = defineTool({
147
+ name: "company_financial_history",
148
+ description: "Historique financier d'une entreprise française : chiffre d'affaires, résultat net, effectifs " +
149
+ "sur les dernières années disponibles. Source : Recherche d'entreprises (DINUM). " +
150
+ "Utile pour analyser la croissance, la rentabilité et les tendances d'une société.",
151
+ inputSchema: z.object({
152
+ siren: z.string().regex(/^\d{9}$/).describe("SIREN à 9 chiffres"),
153
+ }),
154
+ handler: async (input) => {
155
+ if (!isValidSiren(input.siren))
156
+ return { found: false, siren: input.siren, financials: [], reason: "SIREN invalide (checksum Luhn échoué)" };
157
+ const company = await connectors.rechercheEntreprises.getBySiren(input.siren);
158
+ return {
159
+ siren: input.siren,
160
+ legal_name: company?.legal_name,
161
+ financials: company?.financials ?? [],
162
+ found: (company?.financials?.length ?? 0) > 0,
163
+ provenance: company?.provenance,
164
+ };
165
+ },
166
+ });
167
+ const companyBatch = defineTool({
168
+ name: "company_batch",
169
+ description: "Récupère les fiches de plusieurs entreprises françaises en un seul appel (max 20 SIRENs). " +
170
+ "Retourne un tableau de résultats avec statut individuel found/error par SIREN. " +
171
+ "Idéal pour analyse de portefeuille, enrichissement en masse ou comparaison concurrentielle.",
172
+ inputSchema: z.object({
173
+ sirens: z
174
+ .array(z.string().regex(/^\d{9}$/))
175
+ .min(1)
176
+ .max(20)
177
+ .describe("Liste de SIRENs (max 20)"),
178
+ }),
179
+ handler: async (input) => {
180
+ const results = await Promise.all(input.sirens.map(async (siren) => {
181
+ if (!isValidSiren(siren))
182
+ return { siren, found: false, reason: "SIREN invalide (checksum Luhn échoué)" };
183
+ try {
184
+ const company = await connectors.rechercheEntreprises.getBySiren(siren);
185
+ return { siren, found: !!company, company: company ?? null };
186
+ }
187
+ catch (err) {
188
+ return { siren, found: false, error: String(err) };
189
+ }
190
+ }));
191
+ return { count: results.length, results };
192
+ },
193
+ });
194
+ export const companyTools = [companySearch, companyGet, companyEnrich, companyFinancialHistory, companyBatch];
119
195
  //# sourceMappingURL=company.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/tools/company.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/tools/company.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const compoundTools: AnyTool[];
3
+ //# sourceMappingURL=compound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../../src/tools/compound.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AA2HtD,eAAO,MAAM,aAAa,EAAE,OAAO,EAAyB,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { isValidSiren } from "../utils/siren.js";
4
+ import { defineTool } from "./types.js";
5
+ const DECP_DATASET = "decp-2022-marches-valides";
6
+ const companyDeepProfile = defineTool({
7
+ name: "company_deep_profile",
8
+ description: "Profil complet d'une entreprise française en un seul appel : identité (RechercheEntreprises), " +
9
+ "annonces légales BODACC, marchés publics gagnés (DECP), identifiant LEI mondial (GLEIF), " +
10
+ "risques naturels/industriels au siège (Géorisques), détails commune INSEE. " +
11
+ "Remplace 5 appels séparés — idéal pour due diligence, scoring, prospection B2B. " +
12
+ "Ex: siren='552032534' pour BNP Paribas SA.",
13
+ inputSchema: z.object({
14
+ siren: z.string().regex(/^\d{9}$/).describe("SIREN de l'entreprise (9 chiffres)."),
15
+ include_legal: z.boolean().default(true).optional().describe("Annonces BODACC (défaut: true)."),
16
+ include_contracts: z.boolean().default(true).optional().describe("Marchés publics DECP (défaut: true)."),
17
+ include_lei: z.boolean().default(true).optional().describe("LEI mondial GLEIF (défaut: true)."),
18
+ include_risks: z.boolean().default(true).optional().describe("Risques Géorisques au siège (défaut: true)."),
19
+ include_commune: z.boolean().default(true).optional().describe("Détails commune INSEE (défaut: true)."),
20
+ contracts_limit: z.number().int().min(1).max(50).default(10).optional(),
21
+ legal_limit: z.number().int().min(1).max(100).default(20).optional(),
22
+ }),
23
+ handler: async (input) => {
24
+ const requestId = crypto.randomUUID().slice(0, 8);
25
+ if (!isValidSiren(input.siren))
26
+ return { found: false, siren: input.siren, reason: "SIREN invalide (checksum Luhn échoué)", _request_id: requestId };
27
+ const company = await connectors.rechercheEntreprises.getBySiren(input.siren);
28
+ if (!company)
29
+ return { found: false, siren: input.siren, _request_id: requestId };
30
+ const result = { found: true, company, _request_id: requestId };
31
+ const tasks = [];
32
+ if (input.include_legal ?? true) {
33
+ tasks.push(connectors.bodacc
34
+ .searchBySiren(input.siren, input.legal_limit ?? 20)
35
+ .then((data) => { result.legal_announcements = data; })
36
+ .catch((err) => {
37
+ console.error(`[onemcp:${requestId}] bodacc_error:`, String(err));
38
+ result.legal_announcements_error = String(err);
39
+ }));
40
+ }
41
+ if (input.include_contracts ?? true) {
42
+ tasks.push(connectors.decp
43
+ .records(DECP_DATASET, {
44
+ where: `startswith(titulaire_id_1,"${input.siren}")`,
45
+ orderBy: "datenotification desc",
46
+ limit: input.contracts_limit ?? 10,
47
+ })
48
+ .then((data) => { result.public_contracts = data; })
49
+ .catch((err) => {
50
+ console.error(`[onemcp:${requestId}] decp_error:`, String(err));
51
+ result.public_contracts_error = String(err);
52
+ }));
53
+ }
54
+ if ((input.include_lei ?? true) && company.legal_name) {
55
+ const legalName = company.legal_name;
56
+ tasks.push(connectors.gleif
57
+ .search(legalName, 3)
58
+ .then((data) => { result.lei_matches = data; })
59
+ .catch((err) => {
60
+ console.error(`[onemcp:${requestId}] lei_error:`, String(err));
61
+ result.lei_error = String(err);
62
+ }));
63
+ }
64
+ const hq = company.headquarter;
65
+ const addr = hq?.address;
66
+ const hqLat = addr?.latitude;
67
+ const hqLon = addr?.longitude;
68
+ const hqInsee = addr?.insee_code;
69
+ if ((input.include_risks ?? true) && hqLat && hqLon) {
70
+ tasks.push(connectors.georisques
71
+ .byCoordinates(hqLat, hqLon)
72
+ .then((data) => { result.risks = data; })
73
+ .catch((err) => {
74
+ console.error(`[onemcp:${requestId}] georisques_error:`, String(err));
75
+ result.risks_error = String(err);
76
+ }));
77
+ }
78
+ if ((input.include_commune ?? true) && hqInsee) {
79
+ tasks.push(connectors.geoFrance
80
+ .getCommune(hqInsee)
81
+ .then((data) => { result.commune = data; })
82
+ .catch((err) => {
83
+ console.error(`[onemcp:${requestId}] commune_error:`, String(err));
84
+ result.commune_error = String(err);
85
+ }));
86
+ }
87
+ const ac = new AbortController();
88
+ const timeoutId = setTimeout(() => ac.abort(), 20_000);
89
+ const raceTask = (p) => Promise.race([p, new Promise((_, rej) => {
90
+ ac.signal.addEventListener("abort", () => rej(new Error("compound_timeout")));
91
+ })]);
92
+ try {
93
+ await Promise.all(tasks.map(raceTask));
94
+ }
95
+ catch (err) {
96
+ if (String(err).includes("compound_timeout")) {
97
+ result._timeout = true;
98
+ console.error(`[onemcp:${requestId}] compound_timeout: returning partial results`);
99
+ }
100
+ }
101
+ finally {
102
+ clearTimeout(timeoutId);
103
+ }
104
+ return result;
105
+ },
106
+ });
107
+ export const compoundTools = [companyDeepProfile];
108
+ //# sourceMappingURL=compound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/tools/compound.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/tools/geo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAiEtD,eAAO,MAAM,QAAQ,EAAE,OAAO,EAAkD,CAAC"}
1
+ {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/tools/geo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAwItD,eAAO,MAAM,QAAQ,EAAE,OAAO,EAAiF,CAAC"}
package/dist/tools/geo.js CHANGED
@@ -43,8 +43,8 @@ const addressRisks = defineTool({
43
43
  if ((lat === undefined || lon === undefined) && input.address) {
44
44
  const geo = await connectors.ban.search(input.address, 1);
45
45
  const first = geo[0];
46
- if (!first || !first.latitude || !first.longitude) {
47
- return { found: false, reason: "Adresse non géocodée" };
46
+ if (!first || first.latitude == null || first.longitude == null) {
47
+ return { found: false, reason: "Adresse introuvable (BAN)" };
48
48
  }
49
49
  lat = first.latitude;
50
50
  lon = first.longitude;
@@ -55,5 +55,72 @@ const addressRisks = defineTool({
55
55
  return connectors.georisques.byCoordinates(lat, lon);
56
56
  },
57
57
  });
58
- export const geoTools = [addressSearch, addressReverse, addressRisks];
58
+ const addressValidate = defineTool({
59
+ name: "address_validate",
60
+ description: "Valide et normalise une adresse française via la Base Adresse Nationale. " +
61
+ "Retourne l'adresse officielle normalisée, les coordonnées GPS, le score de confiance " +
62
+ "et le code INSEE de la commune. Utile pour standardiser des adresses avant stockage.",
63
+ inputSchema: z.object({
64
+ address: z.string().min(5).describe("Adresse à valider (texte libre)"),
65
+ }),
66
+ handler: async (input) => {
67
+ const results = await connectors.ban.search(input.address, 1);
68
+ if (!results.length)
69
+ return { valid: false, input: input.address, reason: "Adresse introuvable dans la BAN" };
70
+ const best = results[0];
71
+ return {
72
+ valid: true,
73
+ input: input.address,
74
+ normalized: best.label ?? best.full,
75
+ score: best.score,
76
+ coordinates: { lat: best.latitude, lon: best.longitude },
77
+ insee_code: best.insee_code,
78
+ city: best.city,
79
+ postcode: best.postal_code,
80
+ provenance: best.provenance,
81
+ };
82
+ },
83
+ });
84
+ const addressBatch = defineTool({
85
+ name: "address_batch",
86
+ description: "Géocode plusieurs adresses françaises en un seul appel (max 50). Retourne pour chaque adresse : " +
87
+ "adresse normalisée, coordonnées GPS, code INSEE et score de confiance via la Base Adresse Nationale. " +
88
+ "Idéal pour enrichir un CRM, valider un fichier d'adresses, préparer des données géographiques en masse.",
89
+ inputSchema: z.object({
90
+ addresses: z
91
+ .array(z.string().min(5))
92
+ .min(1)
93
+ .max(50)
94
+ .describe("Liste d'adresses à géocoder (max 50)"),
95
+ }),
96
+ handler: async (input) => {
97
+ const results = await Promise.all(input.addresses.map(async (address) => {
98
+ try {
99
+ const found = await connectors.ban.search(address, 1);
100
+ if (!found.length)
101
+ return { input: address, valid: false, reason: "Adresse introuvable" };
102
+ const best = found[0];
103
+ return {
104
+ input: address,
105
+ valid: true,
106
+ normalized: best.label ?? best.full,
107
+ score: best.score,
108
+ coordinates: { lat: best.latitude, lon: best.longitude },
109
+ insee_code: best.insee_code,
110
+ city: best.city,
111
+ postcode: best.postal_code,
112
+ };
113
+ }
114
+ catch (err) {
115
+ return { input: address, valid: false, error: String(err) };
116
+ }
117
+ }));
118
+ return {
119
+ count: results.length,
120
+ valid_count: results.filter((r) => r.valid).length,
121
+ results,
122
+ };
123
+ },
124
+ });
125
+ export const geoTools = [addressSearch, addressReverse, addressRisks, addressValidate, addressBatch];
59
126
  //# sourceMappingURL=geo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/tools/geo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../src/tools/geo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const guideTools: AnyTool[];
3
+ //# sourceMappingURL=guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/tools/guide.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAiPtD,eAAO,MAAM,UAAU,EAAE,OAAO,EAAe,CAAC"}
@@ -0,0 +1,228 @@
1
+ import { z } from "zod";
2
+ import { defineTool } from "./types.js";
3
+ const ROUTES = [
4
+ {
5
+ keywords: ["siren", "siret", "entreprise", "société", "company", "fiche", "profil complet", "due diligence"],
6
+ route: {
7
+ tool: "company_deep_profile",
8
+ description: "Profil complet d'une entreprise (identité + marchés publics + BODACC + LEI + risques) en 1 appel.",
9
+ example_params: { siren: "552032534" },
10
+ },
11
+ },
12
+ {
13
+ keywords: ["cherche", "recherche", "trouve", "search", "nom entreprise", "dirigeant"],
14
+ route: {
15
+ tool: "company_search",
16
+ description: "Chercher des entreprises par nom, dirigeant ou activité.",
17
+ example_params: { query: "Anthropic France" },
18
+ chain_with: ["company_get", "company_deep_profile"],
19
+ },
20
+ },
21
+ {
22
+ keywords: ["marché public", "appel d'offres", "contrat public", "acheteur public", "DECP", "commande publique"],
23
+ route: {
24
+ tool: "public_contracts_search",
25
+ description: "Trouver les marchés publics attribués — par titulaire, acheteur, CPV ou territoire.",
26
+ example_params: { siren_titulaire: "552032534", limit: 20 },
27
+ chain_with: ["company_get"],
28
+ },
29
+ },
30
+ {
31
+ keywords: ["adresse", "geocode", "localisation", "rue", "BAN"],
32
+ route: {
33
+ tool: "address_search",
34
+ description: "Géocoder une adresse française (BAN — Base Adresse Nationale).",
35
+ example_params: { q: "20 avenue de Ségur, Paris" },
36
+ },
37
+ },
38
+ {
39
+ keywords: ["risque", "naturel", "inondation", "séisme", "ICPE", "géorisque"],
40
+ route: {
41
+ tool: "address_risks",
42
+ description: "Lister les risques naturels et industriels à une adresse.",
43
+ example_params: { address: "20 avenue de Ségur, Paris" },
44
+ },
45
+ },
46
+ {
47
+ keywords: ["commune", "ville", "INSEE", "population", "département", "région", "EPCI"],
48
+ route: {
49
+ tool: "admin_commune_search",
50
+ description: "Chercher une commune française par nom, code postal ou département.",
51
+ example_params: { nom: "Lyon" },
52
+ chain_with: ["admin_departement_list", "admin_region_list"],
53
+ },
54
+ },
55
+ {
56
+ keywords: ["immobilier", "DVF", "transaction", "vente", "prix m2", "foncier"],
57
+ route: {
58
+ tool: "realestate_transactions",
59
+ description: "Transactions immobilières DVF (5 ans) par commune INSEE ou code postal.",
60
+ example_params: { insee_code: "75056" },
61
+ },
62
+ },
63
+ {
64
+ keywords: ["TVA", "VAT", "numéro TVA", "validation TVA", "VIES", "intracommunautaire"],
65
+ route: {
66
+ tool: "vat_validate",
67
+ description: "Valider un numéro TVA intracommunautaire via VIES.",
68
+ example_params: { vat_number: "FR76552032534" },
69
+ },
70
+ },
71
+ {
72
+ keywords: ["LEI", "identifiant mondial", "GLEIF", "entité légale mondiale"],
73
+ route: {
74
+ tool: "lei_search",
75
+ description: "Rechercher le LEI mondial d'une entité par nom.",
76
+ example_params: { legal_name: "BNP Paribas" },
77
+ chain_with: ["lei_lookup"],
78
+ },
79
+ },
80
+ {
81
+ keywords: ["brevet", "patent", "invention", "EPO", "OEB", "CPV"],
82
+ route: {
83
+ tool: "patents_search",
84
+ description: "Rechercher des brevets via EPO Espacenet.",
85
+ example_params: { query: "ti=machine learning AND pa=BNP" },
86
+ },
87
+ },
88
+ {
89
+ keywords: ["emploi", "offre", "recrutement", "CDI", "CDD", "France Travail", "Pôle Emploi"],
90
+ route: {
91
+ tool: "jobs_search",
92
+ description: "Chercher des offres d'emploi via France Travail.",
93
+ example_params: { keywords: "développeur TypeScript", location: "Paris" },
94
+ },
95
+ },
96
+ {
97
+ keywords: ["annonce légale", "BODACC", "cessation", "liquidation", "redressement", "procédure"],
98
+ route: {
99
+ tool: "legal_announcements_search",
100
+ description: "Rechercher les annonces légales BODACC d'une entreprise.",
101
+ example_params: { siren: "552032534" },
102
+ chain_with: ["legal_procedures_check"],
103
+ },
104
+ },
105
+ {
106
+ keywords: ["loi", "code civil", "code du travail", "texte légal", "décret", "légifrance", "JORF", "circulaire", "juridique"],
107
+ route: {
108
+ tool: "law_search",
109
+ description: "Rechercher dans les codes, lois, décrets, circulaires, Journal Officiel via Légifrance (PISTE).",
110
+ example_params: { query: "licenciement économique", fond: "CODE" },
111
+ chain_with: ["jurisprudence_search", "code_table_of_contents"],
112
+ },
113
+ },
114
+ {
115
+ keywords: ["jurisprudence", "arrêt", "décision de justice", "cour de cassation", "tribunal", "jugement"],
116
+ route: {
117
+ tool: "jurisprudence_search",
118
+ description: "Rechercher des décisions de justice via Judilibre (Cour de cassation, Cours d'appel).",
119
+ example_params: { query: "force majeure COVID", jurisdiction: "cc" },
120
+ },
121
+ },
122
+ {
123
+ keywords: ["territoire", "département", "bassin d'emploi", "analyse marché", "intelligence territoriale", "zone géographique"],
124
+ route: {
125
+ tool: "area_business_intelligence",
126
+ description: "Intelligence économique d'un département ou commune : entreprises + contrats + immobilier + admin.",
127
+ example_params: { departement: "75" },
128
+ chain_with: ["company_deep_profile", "public_contracts_search"],
129
+ },
130
+ },
131
+ {
132
+ keywords: ["Royaume-Uni", "UK", "Companies House", "britannique", "anglais"],
133
+ route: {
134
+ tool: "company_uk",
135
+ description: "Fiche entreprise UK via Companies House.",
136
+ example_params: { identifier: "00445790" },
137
+ },
138
+ },
139
+ {
140
+ keywords: ["sources", "liste", "disponible", "données", "connecteurs"],
141
+ route: {
142
+ tool: "sources_list",
143
+ description: "Lister toutes les sources de données disponibles dans OneMCP.",
144
+ example_params: {},
145
+ },
146
+ },
147
+ {
148
+ keywords: ["TVA", "numéro tva siren", "assujetti", "vat check", "vérifier tva entreprise"],
149
+ route: {
150
+ tool: "company_vat_check",
151
+ description: "Déduire le numéro de TVA intracommunautaire depuis un SIREN et le valider via VIES.",
152
+ example_params: { siren: "552032534" },
153
+ },
154
+ },
155
+ {
156
+ keywords: ["prix m2", "stats immobilier", "médian immobilier", "prix médian", "statistiques prix"],
157
+ route: {
158
+ tool: "realestate_stats",
159
+ description: "Prix médian au m², moyenne, min/max pour appartements et maisons d'une commune.",
160
+ example_params: { insee_code: "75056" },
161
+ chain_with: ["realestate_transactions"],
162
+ },
163
+ },
164
+ {
165
+ keywords: ["statistiques commune", "commune stats", "données complètes commune", "profil commune"],
166
+ route: {
167
+ tool: "commune_stats",
168
+ description: "Statistiques complètes d'une commune : info admin + transactions DVF + marchés publics.",
169
+ example_params: { insee_code: "75056" },
170
+ },
171
+ },
172
+ {
173
+ keywords: ["valider adresse", "normaliser adresse", "adresse correcte", "code INSEE adresse"],
174
+ route: {
175
+ tool: "address_validate",
176
+ description: "Valider et normaliser une adresse française via la BAN, retourne les coordonnées et code INSEE.",
177
+ example_params: { address: "20 avenue de Ségur Paris" },
178
+ },
179
+ },
180
+ {
181
+ keywords: ["plusieurs adresses", "lot d'adresses", "batch adresses", "géocoder en masse", "fichier d'adresses", "CRM adresses"],
182
+ route: {
183
+ tool: "address_batch",
184
+ description: "Géocoder jusqu'à 50 adresses françaises en un seul appel (BAN) — idéal pour enrichir un CRM ou un fichier.",
185
+ example_params: { addresses: ["20 avenue de Ségur Paris", "1 place du Capitole Toulouse"] },
186
+ chain_with: ["address_validate"],
187
+ },
188
+ },
189
+ ];
190
+ const mcpGuide = defineTool({
191
+ name: "mcp_guide",
192
+ description: "Outil de routage OneMCP : indique quel tool utiliser selon votre intention en langage naturel. " +
193
+ "Retourne le tool recommandé, un exemple de paramètres, et les tools complémentaires à enchaîner. " +
194
+ "Utile quand vous ne savez pas quel tool appeler parmi les 41 disponibles. " +
195
+ "Ex: 'trouver les marchés publics gagnés par une entreprise', 'valider un numéro TVA', 'risques naturels à Paris'.",
196
+ inputSchema: z.object({
197
+ intent: z
198
+ .string()
199
+ .min(5)
200
+ .describe("Décrivez en langage naturel ce que vous voulez faire."),
201
+ lang: z.enum(["fr", "en"]).default("fr").optional(),
202
+ }),
203
+ handler: async (input) => {
204
+ const q = input.intent.toLowerCase();
205
+ const scored = ROUTES.map((r) => {
206
+ const score = r.keywords.filter((kw) => q.includes(kw.toLowerCase())).length;
207
+ return { score, route: r.route };
208
+ }).filter((s) => s.score > 0);
209
+ scored.sort((a, b) => b.score - a.score);
210
+ if (scored.length === 0) {
211
+ return {
212
+ matched: false,
213
+ suggestion: "Aucun tool trouvé pour cette intention. Essayez sources_list pour voir toutes les sources disponibles.",
214
+ fallback_tool: "sources_list",
215
+ all_tools_hint: "Reformulez avec des mots-clés : siren, marché public, TVA, adresse, commune, brevet, emploi, BODACC.",
216
+ };
217
+ }
218
+ const top = scored[0].route;
219
+ const alternatives = scored.slice(1, 3).map((s) => s.route.tool);
220
+ return {
221
+ matched: true,
222
+ recommended: top,
223
+ alternatives: alternatives.length ? alternatives : undefined,
224
+ };
225
+ },
226
+ });
227
+ export const guideTools = [mcpGuide];
228
+ //# sourceMappingURL=guide.js.map