@ansvar/zimbabwe-law-mcp 1.0.1
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/CHANGELOG.md +27 -0
- package/LICENSE +110 -0
- package/README.md +151 -0
- package/data/.gitkeep +0 -0
- package/data/database.db +0 -0
- package/data/seed/zw-access-information-privacy.json +1087 -0
- package/data/seed/zw-broadcasting-services.json +1150 -0
- package/data/seed/zw-companies-business-entities.json +4128 -0
- package/data/seed/zw-constitution-2013.json +2783 -0
- package/data/seed/zw-criminal-law-codification.json +2857 -0
- package/data/seed/zw-cyber-data-protection-2021.json +389 -0
- package/data/seed/zw-freedom-of-information-2020.json +382 -0
- package/data/seed/zw-interception-communications-2007.json +335 -0
- package/data/seed/zw-money-laundering-proceeds-crime.json +1432 -0
- package/data/seed/zw-postal-telecommunications.json +1361 -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 +37 -0
- package/dist/tools/about.d.ts.map +1 -0
- package/dist/tools/about.js +46 -0
- package/dist/tools/about.js.map +1 -0
- package/dist/tools/build-legal-stance.d.ts +21 -0
- package/dist/tools/build-legal-stance.d.ts.map +1 -0
- package/dist/tools/build-legal-stance.js +46 -0
- package/dist/tools/build-legal-stance.js.map +1 -0
- package/dist/tools/check-currency.d.ts +20 -0
- package/dist/tools/check-currency.d.ts.map +1 -0
- package/dist/tools/check-currency.js +41 -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 +33 -0
- package/dist/tools/format-citation.js.map +1 -0
- package/dist/tools/get-eu-basis.d.ts +25 -0
- package/dist/tools/get-eu-basis.d.ts.map +1 -0
- package/dist/tools/get-eu-basis.js +56 -0
- package/dist/tools/get-eu-basis.js.map +1 -0
- package/dist/tools/get-provision-eu-basis.d.ts +20 -0
- package/dist/tools/get-provision-eu-basis.d.ts.map +1 -0
- package/dist/tools/get-provision-eu-basis.js +45 -0
- package/dist/tools/get-provision-eu-basis.js.map +1 -0
- package/dist/tools/get-provision.d.ts +24 -0
- package/dist/tools/get-provision.d.ts.map +1 -0
- package/dist/tools/get-provision.js +80 -0
- package/dist/tools/get-provision.js.map +1 -0
- package/dist/tools/get-zimbabwean-implementations.d.ts +27 -0
- package/dist/tools/get-zimbabwean-implementations.d.ts.map +1 -0
- package/dist/tools/get-zimbabwean-implementations.js +48 -0
- package/dist/tools/get-zimbabwean-implementations.js.map +1 -0
- package/dist/tools/list-sources.d.ts +25 -0
- package/dist/tools/list-sources.d.ts.map +1 -0
- package/dist/tools/list-sources.js +44 -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 +365 -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 +24 -0
- package/dist/tools/search-legislation.d.ts.map +1 -0
- package/dist/tools/search-legislation.js +54 -0
- package/dist/tools/search-legislation.js.map +1 -0
- package/dist/tools/validate-citation.d.ts +26 -0
- package/dist/tools/validate-citation.d.ts.map +1 -0
- package/dist/tools/validate-citation.js +118 -0
- package/dist/tools/validate-citation.js.map +1 -0
- package/dist/tools/validate-eu-compliance.d.ts +20 -0
- package/dist/tools/validate-eu-compliance.d.ts.map +1 -0
- package/dist/tools/validate-eu-compliance.js +98 -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 +19 -0
- package/dist/utils/fts-query.d.ts.map +1 -0
- package/dist/utils/fts-query.js +47 -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 +23 -0
- package/dist/utils/metadata.js.map +1 -0
- package/dist/utils/statute-id.d.ts +15 -0
- package/dist/utils/statute-id.d.ts.map +1 -0
- package/dist/utils/statute-id.js +39 -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 +77 -0
- package/server.json +22 -0
- package/sources.yml +64 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision_eu_basis — Get international/EU legal basis for a specific provision.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveDocumentId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getProvisionEUBasis(db, input) {
|
|
7
|
+
const resolvedId = resolveDocumentId(db, input.document_id);
|
|
8
|
+
if (!resolvedId) {
|
|
9
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return {
|
|
16
|
+
results: [],
|
|
17
|
+
_metadata: {
|
|
18
|
+
...generateResponseMetadata(db),
|
|
19
|
+
...{ note: 'EU/international references not available in this database tier' },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Find the provision
|
|
24
|
+
const ref = input.provision_ref.trim();
|
|
25
|
+
const provision = db.prepare("SELECT id FROM legal_provisions WHERE document_id = ? AND (provision_ref = ? OR provision_ref = ? OR section = ?)").get(resolvedId, ref, `s${ref}`, ref);
|
|
26
|
+
if (!provision) {
|
|
27
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
28
|
+
}
|
|
29
|
+
const rows = db.prepare(`
|
|
30
|
+
SELECT
|
|
31
|
+
er.eu_document_id,
|
|
32
|
+
ed.type as eu_document_type,
|
|
33
|
+
COALESCE(ed.title, ed.short_name) as eu_document_title,
|
|
34
|
+
er.eu_article,
|
|
35
|
+
er.reference_type,
|
|
36
|
+
er.reference_context,
|
|
37
|
+
er.full_citation
|
|
38
|
+
FROM eu_references er
|
|
39
|
+
LEFT JOIN eu_documents ed ON ed.id = er.eu_document_id
|
|
40
|
+
WHERE er.provision_id = ?
|
|
41
|
+
ORDER BY er.reference_type, er.eu_document_id
|
|
42
|
+
`).all(provision.id);
|
|
43
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=get-provision-eu-basis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision-eu-basis.js","sourceRoot":"","sources":["../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAiBnF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAiC,EACjC,KAA+B;IAE/B,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,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,qBAAqB;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,mHAAmH,CACpH,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAA+B,CAAC;IAErE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAavB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAA6B,CAAC;IAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve specific provision(s) from a Zimbabwean statute.
|
|
3
|
+
*/
|
|
4
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
5
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
6
|
+
export interface GetProvisionInput {
|
|
7
|
+
document_id: string;
|
|
8
|
+
section?: string;
|
|
9
|
+
provision_ref?: string;
|
|
10
|
+
as_of_date?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ProvisionResult {
|
|
13
|
+
document_id: string;
|
|
14
|
+
document_title: string;
|
|
15
|
+
provision_ref: string;
|
|
16
|
+
chapter: string | null;
|
|
17
|
+
section: string;
|
|
18
|
+
title: string | null;
|
|
19
|
+
content: string;
|
|
20
|
+
article_number?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function getProvision(db: InstanceType<typeof Database>, input: GetProvisionInput): Promise<ToolResponse<ProvisionResult[]>>;
|
|
24
|
+
//# sourceMappingURL=get-provision.d.ts.map
|
|
@@ -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,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;CACd;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CA+F1C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve specific provision(s) from a Zimbabwean statute.
|
|
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 FROM legal_documents WHERE id = ?').get(resolvedId);
|
|
18
|
+
if (!docRow) {
|
|
19
|
+
return { results: [], _metadata: generateResponseMetadata(db) };
|
|
20
|
+
}
|
|
21
|
+
// Specific provision lookup
|
|
22
|
+
const ref = 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 "s" prefix (e.g., "1" -> "s1")
|
|
28
|
+
if (!provision) {
|
|
29
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND provision_ref = ?').get(resolvedId, `s${refTrimmed}`);
|
|
30
|
+
}
|
|
31
|
+
// Try section column match
|
|
32
|
+
if (!provision) {
|
|
33
|
+
provision = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? AND section = ?').get(resolvedId, refTrimmed);
|
|
34
|
+
}
|
|
35
|
+
// Try LIKE match for flexible input
|
|
36
|
+
if (!provision) {
|
|
37
|
+
provision = db.prepare("SELECT * FROM legal_provisions WHERE document_id = ? AND (provision_ref LIKE ? OR section LIKE ?)").get(resolvedId, `%${refTrimmed}%`, `%${refTrimmed}%`);
|
|
38
|
+
}
|
|
39
|
+
if (provision) {
|
|
40
|
+
return {
|
|
41
|
+
results: [{
|
|
42
|
+
document_id: resolvedId,
|
|
43
|
+
document_title: docRow.title,
|
|
44
|
+
provision_ref: String(provision.provision_ref),
|
|
45
|
+
chapter: provision.chapter,
|
|
46
|
+
section: String(provision.section),
|
|
47
|
+
title: provision.title,
|
|
48
|
+
content: String(provision.content),
|
|
49
|
+
article_number: String(provision.provision_ref).replace(/^s/, ''),
|
|
50
|
+
url: docRow.url ?? undefined,
|
|
51
|
+
}],
|
|
52
|
+
_metadata: generateResponseMetadata(db),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
results: [],
|
|
57
|
+
_metadata: {
|
|
58
|
+
...generateResponseMetadata(db),
|
|
59
|
+
...{ note: `Provision "${ref}" not found in document "${resolvedId}"` },
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Return all provisions for the document
|
|
64
|
+
const provisions = db.prepare('SELECT * FROM legal_provisions WHERE document_id = ? ORDER BY id').all(resolvedId);
|
|
65
|
+
return {
|
|
66
|
+
results: provisions.map(p => ({
|
|
67
|
+
document_id: resolvedId,
|
|
68
|
+
document_title: docRow.title,
|
|
69
|
+
provision_ref: String(p.provision_ref),
|
|
70
|
+
chapter: p.chapter,
|
|
71
|
+
section: String(p.section),
|
|
72
|
+
title: p.title,
|
|
73
|
+
content: String(p.content),
|
|
74
|
+
article_number: String(p.provision_ref).replace(/^s/, ''),
|
|
75
|
+
url: docRow.url ?? undefined,
|
|
76
|
+
})),
|
|
77
|
+
_metadata: generateResponseMetadata(db),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# 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,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_zimbabwean_implementations — Find Zimbabwean statutes implementing a specific
|
|
3
|
+
* EU directive/regulation or international convention.
|
|
4
|
+
*
|
|
5
|
+
* Zimbabwe is not an EU member, but its laws often align with international frameworks:
|
|
6
|
+
* - CDPA (2021) aligns with GDPR principles
|
|
7
|
+
* - Cybercrime provisions align with the Budapest Convention
|
|
8
|
+
* - Electronic Transactions Act aligns with UNCITRAL Model Law
|
|
9
|
+
*/
|
|
10
|
+
import type Database from '@ansvar/mcp-sqlite';
|
|
11
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
12
|
+
export interface GetZimbabweanImplementationsInput {
|
|
13
|
+
eu_document_id: string;
|
|
14
|
+
primary_only?: boolean;
|
|
15
|
+
in_force_only?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ZimbabweanImplementationResult {
|
|
18
|
+
document_id: string;
|
|
19
|
+
document_title: string;
|
|
20
|
+
status: string;
|
|
21
|
+
reference_type: string;
|
|
22
|
+
implementation_status: string | null;
|
|
23
|
+
is_primary: boolean;
|
|
24
|
+
reference_count: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function getZimbabweanImplementations(db: InstanceType<typeof Database>, input: GetZimbabweanImplementationsInput): Promise<ToolResponse<ZimbabweanImplementationResult[]>>;
|
|
27
|
+
//# sourceMappingURL=get-zimbabwean-implementations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-zimbabwean-implementations.d.ts","sourceRoot":"","sources":["../../src/tools/get-zimbabwean-implementations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iCAAiC;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,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;CACzB;AAED,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,YAAY,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAwCzD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_zimbabwean_implementations — Find Zimbabwean statutes implementing a specific
|
|
3
|
+
* EU directive/regulation or international convention.
|
|
4
|
+
*
|
|
5
|
+
* Zimbabwe is not an EU member, but its laws often align with international frameworks:
|
|
6
|
+
* - CDPA (2021) aligns with GDPR principles
|
|
7
|
+
* - Cybercrime provisions align with the Budapest Convention
|
|
8
|
+
* - Electronic Transactions Act aligns with UNCITRAL Model Law
|
|
9
|
+
*/
|
|
10
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
11
|
+
export async function getZimbabweanImplementations(db, input) {
|
|
12
|
+
try {
|
|
13
|
+
db.prepare('SELECT 1 FROM eu_references LIMIT 1').get();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {
|
|
17
|
+
results: [],
|
|
18
|
+
_metadata: {
|
|
19
|
+
...generateResponseMetadata(db),
|
|
20
|
+
...{ note: 'EU/international references not available in this database tier' },
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let sql = `
|
|
25
|
+
SELECT
|
|
26
|
+
ld.id as document_id,
|
|
27
|
+
ld.title as document_title,
|
|
28
|
+
ld.status,
|
|
29
|
+
er.reference_type,
|
|
30
|
+
MAX(er.implementation_status) as implementation_status,
|
|
31
|
+
MAX(er.is_primary_implementation) as is_primary,
|
|
32
|
+
COUNT(*) as reference_count
|
|
33
|
+
FROM eu_references er
|
|
34
|
+
JOIN legal_documents ld ON ld.id = er.document_id
|
|
35
|
+
WHERE er.eu_document_id = ?
|
|
36
|
+
`;
|
|
37
|
+
const params = [input.eu_document_id];
|
|
38
|
+
if (input.primary_only) {
|
|
39
|
+
sql += ' AND er.is_primary_implementation = 1';
|
|
40
|
+
}
|
|
41
|
+
if (input.in_force_only) {
|
|
42
|
+
sql += " AND ld.status = 'in_force'";
|
|
43
|
+
}
|
|
44
|
+
sql += ' GROUP BY ld.id, er.reference_type ORDER BY is_primary DESC, reference_count DESC';
|
|
45
|
+
const rows = db.prepare(sql).all(...params);
|
|
46
|
+
return { results: rows, _metadata: generateResponseMetadata(db) };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=get-zimbabwean-implementations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-zimbabwean-implementations.js","sourceRoot":"","sources":["../../src/tools/get-zimbabwean-implementations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAkBnF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAiC,EACjC,KAAwC;IAExC,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;;;;;;;;;;;;GAYT,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,CAAqC,CAAC;IAChF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
}
|
|
14
|
+
export interface ListSourcesResult {
|
|
15
|
+
sources: SourceInfo[];
|
|
16
|
+
database: {
|
|
17
|
+
tier: string;
|
|
18
|
+
schema_version: string;
|
|
19
|
+
built_at?: string;
|
|
20
|
+
document_count: number;
|
|
21
|
+
provision_count: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function listSources(db: InstanceType<typeof Database>): Promise<ToolResponse<ListSourcesResult>>;
|
|
25
|
+
//# 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;CACrB;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,CA8B1C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
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: 'Zimbabwe Legal Information Institute (ZimLII)',
|
|
22
|
+
authority: 'ZimLII, hosted by AfricanLII / University of Cape Town',
|
|
23
|
+
url: 'https://zimlii.org',
|
|
24
|
+
license: 'Free Access (AfricanLII)',
|
|
25
|
+
coverage: 'All Acts of Parliament including Cyber and Data Protection Act (2021), ' +
|
|
26
|
+
'Postal and Telecommunications Act (Chapter 12:05), Access to Information and Protection of Privacy Act (AIPPA), ' +
|
|
27
|
+
'Criminal Law (Codification and Reform) Act (Chapter 9:23), Companies and Other Business Entities Act, ' +
|
|
28
|
+
'Interception of Communications Act, Electronic Transactions Act; ' +
|
|
29
|
+
'Statutory Instruments; selected case law from the Supreme Court, High Court, and Constitutional Court',
|
|
30
|
+
languages: ['en'],
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
database: {
|
|
34
|
+
tier: meta.tier,
|
|
35
|
+
schema_version: meta.schema_version,
|
|
36
|
+
built_at: meta.built_at,
|
|
37
|
+
document_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_documents'),
|
|
38
|
+
provision_count: safeCount(db, 'SELECT COUNT(*) as count FROM legal_provisions'),
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
_metadata: generateResponseMetadata(db),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# 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;AAsBnF,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,+CAA+C;oBACrD,SAAS,EAAE,wDAAwD;oBACnE,GAAG,EAAE,oBAAoB;oBACzB,OAAO,EAAE,0BAA0B;oBACnC,QAAQ,EACN,yEAAyE;wBACzE,kHAAkH;wBAClH,wGAAwG;wBACxG,mEAAmE;wBACnE,uGAAuG;oBACzG,SAAS,EAAE,CAAC,IAAI,CAAC;iBAClB;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 Zimbabwe 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;AAqB/C,eAAO,MAAM,KAAK,EAAE,IAAI,EA2PvB,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"}
|