@ansvar/uae-law-mcp 1.1.2
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.
- package/LICENSE +190 -0
- package/README.md +359 -0
- package/data/database.db +0 -0
- package/dist/capabilities.d.ts +16 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +43 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/about.d.ts +40 -0
- package/dist/tools/about.d.ts.map +1 -0
- package/dist/tools/about.js +72 -0
- package/dist/tools/about.js.map +1 -0
- package/dist/tools/build-legal-stance.d.ts +24 -0
- package/dist/tools/build-legal-stance.d.ts.map +1 -0
- package/dist/tools/build-legal-stance.js +52 -0
- package/dist/tools/build-legal-stance.js.map +1 -0
- package/dist/tools/check-currency.d.ts +22 -0
- package/dist/tools/check-currency.d.ts.map +1 -0
- package/dist/tools/check-currency.js +44 -0
- package/dist/tools/check-currency.js.map +1 -0
- package/dist/tools/format-citation.d.ts +19 -0
- package/dist/tools/format-citation.d.ts.map +1 -0
- package/dist/tools/format-citation.js +38 -0
- package/dist/tools/format-citation.js.map +1 -0
- package/dist/tools/get-eu-basis.d.ts +26 -0
- package/dist/tools/get-eu-basis.d.ts.map +1 -0
- package/dist/tools/get-eu-basis.js +57 -0
- package/dist/tools/get-eu-basis.js.map +1 -0
- package/dist/tools/get-provision-eu-basis.d.ts +21 -0
- package/dist/tools/get-provision-eu-basis.d.ts.map +1 -0
- package/dist/tools/get-provision-eu-basis.js +46 -0
- package/dist/tools/get-provision-eu-basis.js.map +1 -0
- package/dist/tools/get-provision.d.ts +27 -0
- package/dist/tools/get-provision.d.ts.map +1 -0
- package/dist/tools/get-provision.js +88 -0
- package/dist/tools/get-provision.js.map +1 -0
- package/dist/tools/get-uae-implementations.d.ts +29 -0
- package/dist/tools/get-uae-implementations.d.ts.map +1 -0
- package/dist/tools/get-uae-implementations.js +50 -0
- package/dist/tools/get-uae-implementations.js.map +1 -0
- package/dist/tools/list-sources.d.ts +26 -0
- package/dist/tools/list-sources.d.ts.map +1 -0
- package/dist/tools/list-sources.js +63 -0
- package/dist/tools/list-sources.js.map +1 -0
- package/dist/tools/registry.d.ts +13 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +387 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search-eu-implementations.d.ts +25 -0
- package/dist/tools/search-eu-implementations.d.ts.map +1 -0
- package/dist/tools/search-eu-implementations.js +59 -0
- package/dist/tools/search-eu-implementations.js.map +1 -0
- package/dist/tools/search-legislation.d.ts +27 -0
- package/dist/tools/search-legislation.d.ts.map +1 -0
- package/dist/tools/search-legislation.js +60 -0
- package/dist/tools/search-legislation.js.map +1 -0
- package/dist/tools/validate-citation.d.ts +29 -0
- package/dist/tools/validate-citation.d.ts.map +1 -0
- package/dist/tools/validate-citation.js +129 -0
- package/dist/tools/validate-citation.js.map +1 -0
- package/dist/tools/validate-eu-compliance.d.ts +22 -0
- package/dist/tools/validate-eu-compliance.d.ts.map +1 -0
- package/dist/tools/validate-eu-compliance.js +103 -0
- package/dist/tools/validate-eu-compliance.js.map +1 -0
- package/dist/utils/as-of-date.d.ts +9 -0
- package/dist/utils/as-of-date.d.ts.map +1 -0
- package/dist/utils/as-of-date.js +25 -0
- package/dist/utils/as-of-date.js.map +1 -0
- package/dist/utils/fts-query.d.ts +21 -0
- package/dist/utils/fts-query.d.ts.map +1 -0
- package/dist/utils/fts-query.js +49 -0
- package/dist/utils/fts-query.js.map +1 -0
- package/dist/utils/metadata.d.ts +16 -0
- package/dist/utils/metadata.d.ts.map +1 -0
- package/dist/utils/metadata.js +25 -0
- package/dist/utils/metadata.js.map +1 -0
- package/dist/utils/statute-id.d.ts +21 -0
- package/dist/utils/statute-id.d.ts.map +1 -0
- package/dist/utils/statute-id.js +51 -0
- package/dist/utils/statute-id.js.map +1 -0
- package/fixtures/golden-hashes.json +56 -0
- package/fixtures/golden-tests.json +180 -0
- package/package.json +80 -0
- package/sources.yml +100 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision.d.ts","sourceRoot":"","sources":["../../src/tools/get-provision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CA0G1C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve specific provision(s) from a UAE federal law, DIFC law, or ADGM regulation.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveDocumentId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getProvision(db, input) {
|
|
7
|
+
const resolvedId = resolveDocumentId(db, input.document_id);
|
|
8
|
+
if (!resolvedId) {
|
|
9
|
+
return {
|
|
10
|
+
results: [],
|
|
11
|
+
_metadata: {
|
|
12
|
+
...generateResponseMetadata(db),
|
|
13
|
+
...{ note: `No document found matching "${input.document_id}"` },
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const docRow = db.prepare('SELECT id, title, url, legal_zone FROM legal_documents WHERE id = ?').get(resolvedId);
|
|
18
|
+
if (!docRow) {
|
|
19
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
20
|
+
}
|
|
21
|
+
// Specific provision lookup — accept article, section, or provision_ref
|
|
22
|
+
const ref = input.article ?? input.provision_ref ?? input.section;
|
|
23
|
+
if (ref) {
|
|
24
|
+
const refTrimmed = ref.trim();
|
|
25
|
+
// Try direct provision_ref match
|
|
26
|
+
let provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, refTrimmed);
|
|
27
|
+
// Try with "art" prefix (e.g., "2" -> "art2") — UAE uses Article numbering
|
|
28
|
+
if (!provision) {
|
|
29
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, `art${refTrimmed}`);
|
|
30
|
+
}
|
|
31
|
+
// Try with "s" prefix for DIFC/ADGM sections
|
|
32
|
+
if (!provision) {
|
|
33
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, `s${refTrimmed}`);
|
|
34
|
+
}
|
|
35
|
+
// Try section column match
|
|
36
|
+
if (!provision) {
|
|
37
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND section = ?').get(resolvedId, refTrimmed);
|
|
38
|
+
}
|
|
39
|
+
// Try LIKE match for flexible input
|
|
40
|
+
if (!provision) {
|
|
41
|
+
provision = db.prepare("SELECT * FROM legal_provisions WHERE document_id = ? AND (provision_ref LIKE ? OR section LIKE ?)").get(resolvedId, `%${refTrimmed}%`, `%${refTrimmed}%`);
|
|
42
|
+
}
|
|
43
|
+
if (provision) {
|
|
44
|
+
return {
|
|
45
|
+
results: [{
|
|
46
|
+
document_id: resolvedId,
|
|
47
|
+
document_title: docRow.title,
|
|
48
|
+
provision_ref: String(provision.provision_ref),
|
|
49
|
+
chapter: provision.chapter,
|
|
50
|
+
section: String(provision.section),
|
|
51
|
+
title: provision.title,
|
|
52
|
+
content: String(provision.content),
|
|
53
|
+
article_number: String(provision.provision_ref).replace(/^(?:art|s)/, ''),
|
|
54
|
+
url: docRow.url ?? undefined,
|
|
55
|
+
legal_zone: docRow.legal_zone ?? undefined,
|
|
56
|
+
language: provision.language,
|
|
57
|
+
}],
|
|
58
|
+
_metadata: generateResponseMetadata(db),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
results: [],
|
|
63
|
+
_metadata: {
|
|
64
|
+
...generateResponseMetadata(db),
|
|
65
|
+
...{ note: `Provision "${ref}" not found in document "${resolvedId}"` },
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Return all provisions for the document
|
|
70
|
+
const provisions = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? ORDER BY id').all(resolvedId);
|
|
71
|
+
return {
|
|
72
|
+
results: provisions.map(p => ({
|
|
73
|
+
document_id: resolvedId,
|
|
74
|
+
document_title: docRow.title,
|
|
75
|
+
provision_ref: String(p.provision_ref),
|
|
76
|
+
chapter: p.chapter,
|
|
77
|
+
section: String(p.section),
|
|
78
|
+
title: p.title,
|
|
79
|
+
content: String(p.content),
|
|
80
|
+
article_number: String(p.provision_ref).replace(/^(?:art|s)/, ''),
|
|
81
|
+
url: docRow.url ?? undefined,
|
|
82
|
+
legal_zone: docRow.legal_zone ?? undefined,
|
|
83
|
+
language: p.language,
|
|
84
|
+
})),
|
|
85
|
+
_metadata: generateResponseMetadata(db),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=get-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision.js","sourceRoot":"","sources":["../../src/tools/get-provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_uae_implementations — Find all UAE statutes that align with or implement
|
|
3
|
+
* a specific EU directive or regulation.
|
|
4
|
+
*
|
|
5
|
+
* UAE implements international standards through autonomous alignment, not EU transposition.
|
|
6
|
+
* Key alignments:
|
|
7
|
+
* - PDPL -> GDPR (Regulation 2016/679)
|
|
8
|
+
* - DIFC DPL -> GDPR
|
|
9
|
+
* - ETA -> eIDAS (Regulation 910/2014)
|
|
10
|
+
*/
|
|
11
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
12
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
13
|
+
export interface GetUAEImplementationsInput {
|
|
14
|
+
eu_document_id: string;
|
|
15
|
+
primary_only?: boolean;
|
|
16
|
+
in_force_only?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface UAEImplementationResult {
|
|
19
|
+
document_id: string;
|
|
20
|
+
document_title: string;
|
|
21
|
+
status: string;
|
|
22
|
+
reference_type: string;
|
|
23
|
+
implementation_status: string | null;
|
|
24
|
+
is_primary: boolean;
|
|
25
|
+
reference_count: number;
|
|
26
|
+
legal_zone: string | null;
|
|
27
|
+
}
|
|
28
|
+
export declare function getUAEImplementations(db: InstanceType<typeof Database>, input: GetUAEImplementationsInput): Promise<ToolResponse<UAEImplementationResult[]>>;
|
|
29
|
+
//# sourceMappingURL=get-uae-implementations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-uae-implementations.d.ts","sourceRoot":"","sources":["../../src/tools/get-uae-implementations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAyClD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_uae_implementations — Find all UAE statutes that align with or implement
|
|
3
|
+
* a specific EU directive or regulation.
|
|
4
|
+
*
|
|
5
|
+
* UAE implements international standards through autonomous alignment, not EU transposition.
|
|
6
|
+
* Key alignments:
|
|
7
|
+
* - PDPL -> GDPR (Regulation 2016/679)
|
|
8
|
+
* - DIFC DPL -> GDPR
|
|
9
|
+
* - ETA -> eIDAS (Regulation 910/2014)
|
|
10
|
+
*/
|
|
11
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
12
|
+
export async function getUAEImplementations(db, input) {
|
|
13
|
+
try {
|
|
14
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return {
|
|
18
|
+
results: [],
|
|
19
|
+
_metadata: {
|
|
20
|
+
...generateResponseMetadata(db),
|
|
21
|
+
...{ note: 'EU/international references not available in this database tier' },
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
let sql = `
|
|
26
|
+
SELECT
|
|
27
|
+
ld.id as document_id,
|
|
28
|
+
ld.title as document_title,
|
|
29
|
+
ld.status,
|
|
30
|
+
er.reference_type,
|
|
31
|
+
MAX(er.implementation_status) as implementation_status,
|
|
32
|
+
MAX(er.is_primary_implementation) as is_primary,
|
|
33
|
+
COUNT(*) as reference_count,
|
|
34
|
+
ld.legal_zone
|
|
35
|
+
FROM eu_references er
|
|
36
|
+
JOIN legal_documents ld ON ld.id = er.document_id
|
|
37
|
+
WHERE er.eu_document_id = ?
|
|
38
|
+
`;
|
|
39
|
+
const params = [input.eu_document_id];
|
|
40
|
+
if (input.primary_only) {
|
|
41
|
+
sql += ' AND er.is_primary_implementation = 1';
|
|
42
|
+
}
|
|
43
|
+
if (input.in_force_only) {
|
|
44
|
+
sql += " AND ld.status = 'in_force'";
|
|
45
|
+
}
|
|
46
|
+
sql += ' GROUP BY ld.id, er.reference_type ORDER BY is_primary DESC, reference_count DESC';
|
|
47
|
+
const rows = db.prepare(sql).all(...params);
|
|
48
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=get-uae-implementations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-uae-implementations.js","sourceRoot":"","sources":["../../src/tools/get-uae-implementations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAmBnF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAiC,EACjC,KAAiC;IAEjC,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,GAAG,wBAAwB,CAAC,EAAE,CAAC;gBAC/B,GAAG,EAAE,IAAI,EAAE,iEAAiE,EAAE;aAC/E;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,GAAG;;;;;;;;;;;;;GAaT,CAAC;IACF,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE3D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,GAAG,IAAI,uCAAuC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,GAAG,IAAI,6BAA6B,CAAC;IACvC,CAAC;IAED,GAAG,IAAI,mFAAmF,CAAC;IAE3F,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA8B,CAAC;IACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Return provenance metadata for all data sources.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface SourceInfo {
|
|
7
|
+
name: string;
|
|
8
|
+
authority: string;
|
|
9
|
+
url: string;
|
|
10
|
+
license: string;
|
|
11
|
+
coverage: string;
|
|
12
|
+
languages: string[];
|
|
13
|
+
legal_zone: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ListSourcesResult {
|
|
16
|
+
sources: SourceInfo[];
|
|
17
|
+
database: {
|
|
18
|
+
tier: string;
|
|
19
|
+
schema_version: string;
|
|
20
|
+
built_at?: string;
|
|
21
|
+
document_count: number;
|
|
22
|
+
provision_count: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function listSources(db: InstanceType<typeof Database>): Promise<ToolResponse<ListSourcesResult>>;
|
|
26
|
+
//# sourceMappingURL=list-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.d.ts","sourceRoot":"","sources":["../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAWD,wBAAsB,WAAW,CAC/B,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAmD1C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Return provenance metadata for all data sources.
|
|
3
|
+
*/
|
|
4
|
+
import { readDbMetadata } from '../capabilities.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
function safeCount(db, sql) {
|
|
7
|
+
try {
|
|
8
|
+
const row = db.prepare(sql).get();
|
|
9
|
+
return row ? Number(row.count) : 0;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function listSources(db) {
|
|
16
|
+
const meta = readDbMetadata(db);
|
|
17
|
+
return {
|
|
18
|
+
results: {
|
|
19
|
+
sources: [
|
|
20
|
+
{
|
|
21
|
+
name: 'UAE Ministry of Justice (Official Legislation Portal)',
|
|
22
|
+
authority: 'Ministry of Justice, United Arab Emirates',
|
|
23
|
+
url: 'https://moj.gov.ae',
|
|
24
|
+
license: 'Government Open Data',
|
|
25
|
+
coverage: 'Federal Decree-Laws, Federal Laws, Cabinet Decisions, and ministerial resolutions including ' +
|
|
26
|
+
'PDPL (45/2021), Cybercrimes Law (34/2021), Electronic Transactions Law (46/2021), ' +
|
|
27
|
+
'Commercial Companies Law (2/2015), and related implementing regulations',
|
|
28
|
+
languages: ['ar', 'en'],
|
|
29
|
+
legal_zone: 'federal',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'DIFC Laws and Regulations',
|
|
33
|
+
authority: 'Dubai International Financial Centre (DIFC)',
|
|
34
|
+
url: 'https://difclaws.com',
|
|
35
|
+
license: 'Government Open Data',
|
|
36
|
+
coverage: 'DIFC Data Protection Law (Law No. 5/2020), DIFC Operating Law, DIFC Companies Law, ' +
|
|
37
|
+
'DIFC Employment Law, DIFC Insolvency Law, DIFC Arbitration Law, and all DIFC regulations and rules of court',
|
|
38
|
+
languages: ['en'],
|
|
39
|
+
legal_zone: 'difc',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'ADGM Legal Framework',
|
|
43
|
+
authority: 'Abu Dhabi Global Market (ADGM)',
|
|
44
|
+
url: 'https://adgm.com/legal-framework',
|
|
45
|
+
license: 'Government Open Data',
|
|
46
|
+
coverage: 'ADGM Data Protection Regulations 2021, ADGM Companies Regulations, ' +
|
|
47
|
+
'ADGM Financial Services regulations, ADGM Employment Regulations, and all ADGM guidance and rules',
|
|
48
|
+
languages: ['en'],
|
|
49
|
+
legal_zone: 'adgm',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
database: {
|
|
53
|
+
tier: meta.tier,
|
|
54
|
+
schema_version: meta.schema_version,
|
|
55
|
+
built_at: meta.built_at,
|
|
56
|
+
document_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_documents'),
|
|
57
|
+
provision_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_provisions'),
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
_metadata: generateResponseMetadata(db),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=list-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../src/tools/list-sources.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAuBnF,SAAS,SAAS,CAAC,EAAiC,EAAE,GAAW;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAmC,CAAC;QACnE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAiC;IAEjC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAEhC,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,uDAAuD;oBAC7D,SAAS,EAAE,2CAA2C;oBACtD,GAAG,EAAE,oBAAoB;oBACzB,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EACN,8FAA8F;wBAC9F,oFAAoF;wBACpF,yEAAyE;oBAC3E,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;oBACvB,UAAU,EAAE,SAAS;iBACtB;gBACD;oBACE,IAAI,EAAE,2BAA2B;oBACjC,SAAS,EAAE,6CAA6C;oBACxD,GAAG,EAAE,sBAAsB;oBAC3B,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EACN,qFAAqF;wBACrF,6GAA6G;oBAC/G,SAAS,EAAE,CAAC,IAAI,CAAC;oBACjB,UAAU,EAAE,MAAM;iBACnB;gBACD;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,SAAS,EAAE,gCAAgC;oBAC3C,GAAG,EAAE,kCAAkC;oBACvC,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EACN,qEAAqE;wBACrE,mGAAmG;oBACrG,SAAS,EAAE,CAAC,IAAI,CAAC;oBACjB,UAAU,EAAE,MAAM;iBACnB;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,SAAS,CAAC,EAAE,EAAE,+CAA+C,CAAC;gBAC9E,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,gDAAgD,CAAC;aACjF;SACF;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registry for UAE Law MCP Server.
|
|
3
|
+
* Shared between stdio (index.ts) and HTTP (api/mcp.ts) entry points.
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
8
|
+
import { type AboutContext } from './about.js';
|
|
9
|
+
export type { AboutContext } from './about.js';
|
|
10
|
+
export declare const TOOLS: Tool[];
|
|
11
|
+
export declare function buildTools(db?: InstanceType<typeof Database>, context?: AboutContext): Tool[];
|
|
12
|
+
export declare function registerTools(server: Server, db: InstanceType<typeof Database>, context?: AboutContext): void;
|
|
13
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAGL,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAc/C,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsB/C,eAAO,MAAM,KAAK,EAAE,IAAI,EAiRvB,CAAC;AAEF,wBAAgB,UAAU,CACxB,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,EAAE,CAiBR;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,CA8EN"}
|