@ansvar/india-law-mcp 1.1.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/LICENSE +190 -0
- package/README.md +404 -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 +45 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/citation/formatter.d.ts +11 -0
- package/dist/citation/formatter.d.ts.map +1 -0
- package/dist/citation/formatter.js +35 -0
- package/dist/citation/formatter.js.map +1 -0
- package/dist/citation/parser.d.ts +12 -0
- package/dist/citation/parser.d.ts.map +1 -0
- package/dist/citation/parser.js +69 -0
- package/dist/citation/parser.js.map +1 -0
- package/dist/citation/validator.d.ts +10 -0
- package/dist/citation/validator.d.ts.map +1 -0
- package/dist/citation/validator.js +74 -0
- package/dist/citation/validator.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/about.d.ts +35 -0
- package/dist/tools/about.d.ts.map +1 -0
- package/dist/tools/about.js +51 -0
- package/dist/tools/about.js.map +1 -0
- package/dist/tools/build-legal-stance.d.ts +29 -0
- package/dist/tools/build-legal-stance.d.ts.map +1 -0
- package/dist/tools/build-legal-stance.js +54 -0
- package/dist/tools/build-legal-stance.js.map +1 -0
- package/dist/tools/check-currency.d.ts +23 -0
- package/dist/tools/check-currency.d.ts.map +1 -0
- package/dist/tools/check-currency.js +49 -0
- package/dist/tools/check-currency.js.map +1 -0
- package/dist/tools/format-citation.d.ts +18 -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 +69 -0
- package/dist/tools/get-eu-basis.js.map +1 -0
- package/dist/tools/get-indian-implementations.d.ts +25 -0
- package/dist/tools/get-indian-implementations.d.ts.map +1 -0
- package/dist/tools/get-indian-implementations.js +48 -0
- package/dist/tools/get-indian-implementations.js.map +1 -0
- package/dist/tools/get-provision-eu-basis.d.ts +18 -0
- package/dist/tools/get-provision-eu-basis.d.ts.map +1 -0
- package/dist/tools/get-provision-eu-basis.js +55 -0
- package/dist/tools/get-provision-eu-basis.js.map +1 -0
- package/dist/tools/get-provision.d.ts +28 -0
- package/dist/tools/get-provision.d.ts.map +1 -0
- package/dist/tools/get-provision.js +74 -0
- package/dist/tools/get-provision.js.map +1 -0
- package/dist/tools/list-sources.d.ts +29 -0
- package/dist/tools/list-sources.d.ts.map +1 -0
- package/dist/tools/list-sources.js +78 -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 +398 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search-eu-implementations.d.ts +32 -0
- package/dist/tools/search-eu-implementations.d.ts.map +1 -0
- package/dist/tools/search-eu-implementations.js +63 -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 +60 -0
- package/dist/tools/search-legislation.js.map +1 -0
- package/dist/tools/validate-citation.d.ts +20 -0
- package/dist/tools/validate-citation.d.ts.map +1 -0
- package/dist/tools/validate-citation.js +37 -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 +63 -0
- package/dist/tools/validate-eu-compliance.js.map +1 -0
- package/dist/types/citations.d.ts +21 -0
- package/dist/types/citations.d.ts.map +1 -0
- package/dist/types/citations.js +2 -0
- package/dist/types/citations.js.map +1 -0
- package/dist/types/documents.d.ts +16 -0
- package/dist/types/documents.d.ts.map +1 -0
- package/dist/types/documents.js +2 -0
- package/dist/types/documents.js.map +1 -0
- package/dist/types/eu-references.d.ts +54 -0
- package/dist/types/eu-references.d.ts.map +1 -0
- package/dist/types/eu-references.js +2 -0
- package/dist/types/eu-references.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/provisions.d.ts +18 -0
- package/dist/types/provisions.d.ts.map +1 -0
- package/dist/types/provisions.js +2 -0
- package/dist/types/provisions.js.map +1 -0
- package/dist/utils/as-of-date.d.ts +2 -0
- package/dist/utils/as-of-date.d.ts.map +1 -0
- package/dist/utils/as-of-date.js +23 -0
- package/dist/utils/as-of-date.js.map +1 -0
- package/dist/utils/fts-query.d.ts +13 -0
- package/dist/utils/fts-query.d.ts.map +1 -0
- package/dist/utils/fts-query.js +56 -0
- package/dist/utils/fts-query.js.map +1 -0
- package/dist/utils/metadata.d.ts +15 -0
- package/dist/utils/metadata.d.ts.map +1 -0
- package/dist/utils/metadata.js +29 -0
- package/dist/utils/metadata.js.map +1 -0
- package/dist/utils/statute-id.d.ts +13 -0
- package/dist/utils/statute-id.d.ts.map +1 -0
- package/dist/utils/statute-id.js +69 -0
- package/dist/utils/statute-id.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* format_citation — Format an Indian legal citation per standard conventions.
|
|
3
|
+
*/
|
|
4
|
+
import { parseCitation } from '../citation/parser.js';
|
|
5
|
+
import { formatCitation } from '../citation/formatter.js';
|
|
6
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
7
|
+
export async function formatCitationTool(input) {
|
|
8
|
+
if (!input.citation || input.citation.trim().length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
results: { input: '', formatted: '', type: 'unknown', valid: false, error: 'Empty citation' },
|
|
11
|
+
_metadata: generateResponseMetadata()
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const parsed = parseCitation(input.citation);
|
|
15
|
+
if (!parsed.valid) {
|
|
16
|
+
return {
|
|
17
|
+
results: {
|
|
18
|
+
input: input.citation,
|
|
19
|
+
formatted: input.citation,
|
|
20
|
+
type: 'unknown',
|
|
21
|
+
valid: false,
|
|
22
|
+
error: parsed.error,
|
|
23
|
+
},
|
|
24
|
+
_metadata: generateResponseMetadata()
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const formatted = formatCitation(parsed, input.format ?? 'full');
|
|
28
|
+
return {
|
|
29
|
+
results: {
|
|
30
|
+
input: input.citation,
|
|
31
|
+
formatted,
|
|
32
|
+
type: parsed.type,
|
|
33
|
+
valid: true,
|
|
34
|
+
},
|
|
35
|
+
_metadata: generateResponseMetadata()
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=format-citation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-citation.js","sourceRoot":"","sources":["../../src/tools/format-citation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAenF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA0B;IAE1B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE;YAC7F,SAAS,EAAE,wBAAwB,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE;gBACP,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,SAAS,EAAE,KAAK,CAAC,QAAQ;gBACzB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;YACD,SAAS,EAAE,wBAAwB,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAEjE,OAAO;QACL,OAAO,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,QAAQ;YACrB,SAAS;YACT,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,IAAI;SACZ;QACD,SAAS,EAAE,wBAAwB,EAAE;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_eu_basis — Retrieve EU/international legal basis for an Indian statute.
|
|
3
|
+
*
|
|
4
|
+
* For India, this provides cross-references to EU instruments that Indian laws
|
|
5
|
+
* are modelled on or equivalent to (e.g., DPDPA → GDPR).
|
|
6
|
+
*/
|
|
7
|
+
import type { Database } from '@ansvar/mcp-sqlite';
|
|
8
|
+
import type { EUBasisDocument } from '../types/index.js';
|
|
9
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
10
|
+
export interface GetEUBasisInput {
|
|
11
|
+
document_id: string;
|
|
12
|
+
include_articles?: boolean;
|
|
13
|
+
reference_types?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface GetEUBasisResult {
|
|
16
|
+
document_id: string;
|
|
17
|
+
document_title: string;
|
|
18
|
+
eu_documents: EUBasisDocument[];
|
|
19
|
+
statistics: {
|
|
20
|
+
total_eu_references: number;
|
|
21
|
+
directive_count: number;
|
|
22
|
+
regulation_count: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function getEUBasis(db: Database, input: GetEUBasisInput): Promise<ToolResponse<GetEUBasisResult>>;
|
|
26
|
+
//# sourceMappingURL=get-eu-basis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-eu-basis.d.ts","sourceRoot":"","sources":["../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGnF,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,EAAE;QACV,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAwEzC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_eu_basis — Retrieve EU/international legal basis for an Indian statute.
|
|
3
|
+
*
|
|
4
|
+
* For India, this provides cross-references to EU instruments that Indian laws
|
|
5
|
+
* are modelled on or equivalent to (e.g., DPDPA → GDPR).
|
|
6
|
+
*/
|
|
7
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
8
|
+
import { resolveExistingStatuteId } from '../utils/statute-id.js';
|
|
9
|
+
export async function getEUBasis(db, input) {
|
|
10
|
+
if (!input.document_id) {
|
|
11
|
+
throw new Error('document_id is required');
|
|
12
|
+
}
|
|
13
|
+
const resolvedId = resolveExistingStatuteId(db, input.document_id);
|
|
14
|
+
if (!resolvedId) {
|
|
15
|
+
throw new Error(`Document "${input.document_id}" not found in database`);
|
|
16
|
+
}
|
|
17
|
+
const doc = db.prepare('SELECT id, title FROM legal_documents WHERE id = ?').get(resolvedId);
|
|
18
|
+
let sql = `
|
|
19
|
+
SELECT
|
|
20
|
+
ed.id, ed.type, ed.year, ed.number, ed.community,
|
|
21
|
+
ed.celex_number, ed.title, ed.short_name, ed.url_eur_lex,
|
|
22
|
+
er.reference_type, er.is_primary_implementation,
|
|
23
|
+
GROUP_CONCAT(DISTINCT er.eu_article) AS articles
|
|
24
|
+
FROM eu_documents ed
|
|
25
|
+
JOIN eu_references er ON ed.id = er.eu_document_id
|
|
26
|
+
WHERE er.document_id = ?
|
|
27
|
+
`;
|
|
28
|
+
const params = [resolvedId];
|
|
29
|
+
if (input.reference_types && input.reference_types.length > 0) {
|
|
30
|
+
const placeholders = input.reference_types.map(() => '?').join(', ');
|
|
31
|
+
sql += ` AND er.reference_type IN (${placeholders})`;
|
|
32
|
+
params.push(...input.reference_types);
|
|
33
|
+
}
|
|
34
|
+
sql += ` GROUP BY ed.id ORDER BY er.is_primary_implementation DESC, ed.year DESC`;
|
|
35
|
+
const rows = db.prepare(sql).all(...params);
|
|
36
|
+
const euDocuments = rows.map(row => {
|
|
37
|
+
const result = {
|
|
38
|
+
id: row.id, type: row.type, year: row.year, number: row.number,
|
|
39
|
+
community: row.community, reference_type: row.reference_type,
|
|
40
|
+
is_primary_implementation: row.is_primary_implementation === 1,
|
|
41
|
+
};
|
|
42
|
+
if (row.celex_number)
|
|
43
|
+
result.celex_number = row.celex_number;
|
|
44
|
+
if (row.title)
|
|
45
|
+
result.title = row.title;
|
|
46
|
+
if (row.short_name)
|
|
47
|
+
result.short_name = row.short_name;
|
|
48
|
+
if (row.url_eur_lex)
|
|
49
|
+
result.url_eur_lex = row.url_eur_lex;
|
|
50
|
+
if (input.include_articles && row.articles) {
|
|
51
|
+
result.articles = row.articles.split(',').filter(a => a?.trim());
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
results: {
|
|
57
|
+
document_id: doc.id,
|
|
58
|
+
document_title: doc.title,
|
|
59
|
+
eu_documents: euDocuments,
|
|
60
|
+
statistics: {
|
|
61
|
+
total_eu_references: euDocuments.length,
|
|
62
|
+
directive_count: euDocuments.filter(d => d.type === 'directive').length,
|
|
63
|
+
regulation_count: euDocuments.filter(d => d.type === 'regulation').length,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
_metadata: generateResponseMetadata(db),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=get-eu-basis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-eu-basis.js","sourceRoot":"","sources":["../../src/tools/get-eu-basis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_indian_implementations — Find Indian statutes that implement or are equivalent to
|
|
3
|
+
* a specific EU directive or regulation.
|
|
4
|
+
*/
|
|
5
|
+
import type { Database } from '@ansvar/mcp-sqlite';
|
|
6
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
7
|
+
export interface GetIndianImplementationsInput {
|
|
8
|
+
eu_document_id: string;
|
|
9
|
+
primary_only?: boolean;
|
|
10
|
+
in_force_only?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface GetIndianImplementationsResult {
|
|
13
|
+
eu_document_id: string;
|
|
14
|
+
eu_title?: string;
|
|
15
|
+
implementations: Array<{
|
|
16
|
+
document_id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
status: string;
|
|
19
|
+
reference_type: string;
|
|
20
|
+
is_primary: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
total: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function getIndianImplementations(db: Database, input: GetIndianImplementationsInput): Promise<ToolResponse<GetIndianImplementationsResult>>;
|
|
25
|
+
//# sourceMappingURL=get-indian-implementations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-indian-implementations.d.ts","sourceRoot":"","sources":["../../src/tools/get-indian-implementations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,6BAA6B;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,KAAK,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAsDvD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_indian_implementations — Find Indian statutes that implement or are equivalent to
|
|
3
|
+
* a specific EU directive or regulation.
|
|
4
|
+
*/
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
export async function getIndianImplementations(db, input) {
|
|
7
|
+
if (!input.eu_document_id) {
|
|
8
|
+
throw new Error('eu_document_id is required');
|
|
9
|
+
}
|
|
10
|
+
// Get EU document title
|
|
11
|
+
const euDoc = db.prepare('SELECT id, title FROM eu_documents WHERE id = ?').get(input.eu_document_id);
|
|
12
|
+
let sql = `
|
|
13
|
+
SELECT
|
|
14
|
+
er.document_id,
|
|
15
|
+
ld.title,
|
|
16
|
+
ld.status,
|
|
17
|
+
er.reference_type,
|
|
18
|
+
er.is_primary_implementation
|
|
19
|
+
FROM eu_references er
|
|
20
|
+
JOIN legal_documents ld ON ld.id = er.document_id
|
|
21
|
+
WHERE er.eu_document_id = ?
|
|
22
|
+
`;
|
|
23
|
+
const params = [input.eu_document_id];
|
|
24
|
+
if (input.primary_only) {
|
|
25
|
+
sql += ` AND er.is_primary_implementation = 1`;
|
|
26
|
+
}
|
|
27
|
+
if (input.in_force_only) {
|
|
28
|
+
sql += ` AND ld.status = 'in_force'`;
|
|
29
|
+
}
|
|
30
|
+
sql += ` ORDER BY er.is_primary_implementation DESC, ld.title`;
|
|
31
|
+
const rows = db.prepare(sql).all(...params);
|
|
32
|
+
return {
|
|
33
|
+
results: {
|
|
34
|
+
eu_document_id: input.eu_document_id,
|
|
35
|
+
eu_title: euDoc?.title,
|
|
36
|
+
implementations: rows.map(r => ({
|
|
37
|
+
document_id: r.document_id,
|
|
38
|
+
title: r.title,
|
|
39
|
+
status: r.status,
|
|
40
|
+
reference_type: r.reference_type,
|
|
41
|
+
is_primary: r.is_primary_implementation === 1,
|
|
42
|
+
})),
|
|
43
|
+
total: rows.length,
|
|
44
|
+
},
|
|
45
|
+
_metadata: generateResponseMetadata(db),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=get-indian-implementations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-indian-implementations.js","sourceRoot":"","sources":["../../src/tools/get-indian-implementations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAqBnF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAY,EACZ,KAAoC;IAEpC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACtB,iDAAiD,CAClD,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAA8C,CAAC;IAEzE,IAAI,GAAG,GAAG;;;;;;;;;;GAUT,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;IACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,GAAG,IAAI,6BAA6B,CAAC;IACvC,CAAC;IAED,GAAG,IAAI,uDAAuD,CAAC;IAO/D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;IAErD,OAAO;QACL,OAAO,EAAE;YACP,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,EAAE,KAAK;YACtB,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,UAAU,EAAE,CAAC,CAAC,yBAAyB,KAAK,CAAC;aAC9C,CAAC,CAAC;YACH,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision_eu_basis — Get EU/international legal basis for a specific Indian provision.
|
|
3
|
+
*/
|
|
4
|
+
import type { Database } from '@ansvar/mcp-sqlite';
|
|
5
|
+
import type { ProvisionEUReference } from '../types/index.js';
|
|
6
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
7
|
+
export interface GetProvisionEUBasisInput {
|
|
8
|
+
document_id: string;
|
|
9
|
+
provision_ref: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GetProvisionEUBasisResult {
|
|
12
|
+
document_id: string;
|
|
13
|
+
provision_ref: string;
|
|
14
|
+
provision_content?: string;
|
|
15
|
+
eu_references: ProvisionEUReference[];
|
|
16
|
+
}
|
|
17
|
+
export declare function getProvisionEUBasis(db: Database, input: GetProvisionEUBasisInput): Promise<ToolResponse<GetProvisionEUBasisResult>>;
|
|
18
|
+
//# sourceMappingURL=get-provision-eu-basis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision-eu-basis.d.ts","sourceRoot":"","sources":["../../src/tools/get-provision-eu-basis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGnF,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,oBAAoB,EAAE,CAAC;CACvC;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CA0DlD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision_eu_basis — Get EU/international legal basis for a specific Indian provision.
|
|
3
|
+
*/
|
|
4
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
5
|
+
import { resolveExistingStatuteId } from '../utils/statute-id.js';
|
|
6
|
+
export async function getProvisionEUBasis(db, input) {
|
|
7
|
+
if (!input.document_id) {
|
|
8
|
+
throw new Error('document_id is required');
|
|
9
|
+
}
|
|
10
|
+
if (!input.provision_ref?.trim()) {
|
|
11
|
+
throw new Error('provision_ref is required');
|
|
12
|
+
}
|
|
13
|
+
const resolvedId = resolveExistingStatuteId(db, input.document_id);
|
|
14
|
+
if (!resolvedId) {
|
|
15
|
+
throw new Error(`Document "${input.document_id}" not found in database`);
|
|
16
|
+
}
|
|
17
|
+
const provision = db.prepare('SELECT id, content FROM legal_provisions WHERE document_id = ? AND (provision_ref = ? OR section = ?)').get(resolvedId, input.provision_ref, input.provision_ref);
|
|
18
|
+
if (!provision) {
|
|
19
|
+
throw new Error(`Provision ${input.provision_ref} not found in ${input.document_id}`);
|
|
20
|
+
}
|
|
21
|
+
const sql = `
|
|
22
|
+
SELECT ed.id, ed.type, ed.title, ed.short_name, er.eu_article,
|
|
23
|
+
er.reference_type, er.full_citation, er.reference_context
|
|
24
|
+
FROM eu_documents ed
|
|
25
|
+
JOIN eu_references er ON ed.id = er.eu_document_id
|
|
26
|
+
WHERE er.provision_id = ?
|
|
27
|
+
ORDER BY ed.year DESC
|
|
28
|
+
`;
|
|
29
|
+
const rows = db.prepare(sql).all(provision.id);
|
|
30
|
+
return {
|
|
31
|
+
results: {
|
|
32
|
+
document_id: resolvedId,
|
|
33
|
+
provision_ref: input.provision_ref,
|
|
34
|
+
provision_content: provision.content,
|
|
35
|
+
eu_references: rows.map(r => {
|
|
36
|
+
const ref = {
|
|
37
|
+
id: r.id, type: r.type,
|
|
38
|
+
reference_type: r.reference_type,
|
|
39
|
+
full_citation: r.full_citation || r.id,
|
|
40
|
+
};
|
|
41
|
+
if (r.title)
|
|
42
|
+
ref.title = r.title;
|
|
43
|
+
if (r.short_name)
|
|
44
|
+
ref.short_name = r.short_name;
|
|
45
|
+
if (r.eu_article)
|
|
46
|
+
ref.article = r.eu_article;
|
|
47
|
+
if (r.reference_context)
|
|
48
|
+
ref.context = r.reference_context;
|
|
49
|
+
return ref;
|
|
50
|
+
}),
|
|
51
|
+
},
|
|
52
|
+
_metadata: generateResponseMetadata(db),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# 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;AAIH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAclE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAY,EACZ,KAA+B;IAE/B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,WAAW,yBAAyB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,uGAAuG,CACxG,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAgD,CAAC;IAE3G,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,iBAAiB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,GAAG,GAAG;;;;;;;GAOX,CAAC;IAQF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAU,CAAC;IAExD,OAAO;QACL,OAAO,EAAE;YACP,WAAW,EAAE,UAAU;YACvB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,iBAAiB,EAAE,SAAS,CAAC,OAAO;YACpC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC1B,MAAM,GAAG,GAAyB;oBAChC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;oBACtB,cAAc,EAAE,CAAC,CAAC,cAAwD;oBAC1E,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE;iBACvC,CAAC;gBACF,IAAI,CAAC,CAAC,KAAK;oBAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBACjC,IAAI,CAAC,CAAC,UAAU;oBAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;gBAChD,IAAI,CAAC,CAAC,UAAU;oBAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC;gBAC7C,IAAI,CAAC,CAAC,iBAAiB;oBAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,iBAAiB,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;SACH;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve a specific provision from an Indian 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
|
+
part?: string;
|
|
9
|
+
chapter?: string;
|
|
10
|
+
section?: string;
|
|
11
|
+
provision_ref?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ProvisionResult {
|
|
14
|
+
document_id: string;
|
|
15
|
+
document_title: string;
|
|
16
|
+
document_status: string;
|
|
17
|
+
provision_ref: string;
|
|
18
|
+
chapter: string | null;
|
|
19
|
+
section: string;
|
|
20
|
+
title: string | null;
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function getProvision(db: Database, input: GetProvisionInput): Promise<ToolResponse<ProvisionResult | ProvisionResult[] | {
|
|
24
|
+
provisions: ProvisionResult[];
|
|
25
|
+
truncated: boolean;
|
|
26
|
+
total: number;
|
|
27
|
+
} | null>>;
|
|
28
|
+
//# 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,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,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;CACjB;AAgBD,wBAAsB,YAAY,CAChC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,eAAe,GAAG,eAAe,EAAE,GAAG;IAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC,CA4E1I"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get_provision — Retrieve a specific provision from an Indian statute.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveExistingStatuteId } from '../utils/statute-id.js';
|
|
5
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
6
|
+
/** Safety cap when returning all provisions for a statute */
|
|
7
|
+
const MAX_ALL_PROVISIONS = 200;
|
|
8
|
+
export async function getProvision(db, input) {
|
|
9
|
+
if (!input.document_id) {
|
|
10
|
+
throw new Error('document_id is required');
|
|
11
|
+
}
|
|
12
|
+
const resolvedDocumentId = resolveExistingStatuteId(db, input.document_id) ?? input.document_id;
|
|
13
|
+
const provisionRef = input.provision_ref ?? input.section;
|
|
14
|
+
// If no specific provision, return all provisions for the document (with safety cap)
|
|
15
|
+
if (!provisionRef) {
|
|
16
|
+
const countRow = db.prepare('SELECT COUNT(*) as count FROM legal_provisions WHERE document_id = ?').get(resolvedDocumentId);
|
|
17
|
+
const total = countRow?.count ?? 0;
|
|
18
|
+
const rows = db.prepare(`
|
|
19
|
+
SELECT
|
|
20
|
+
lp.document_id,
|
|
21
|
+
ld.title as document_title,
|
|
22
|
+
ld.status as document_status,
|
|
23
|
+
lp.provision_ref,
|
|
24
|
+
lp.chapter,
|
|
25
|
+
lp.section,
|
|
26
|
+
lp.title,
|
|
27
|
+
lp.content
|
|
28
|
+
FROM legal_provisions lp
|
|
29
|
+
JOIN legal_documents ld ON ld.id = lp.document_id
|
|
30
|
+
WHERE lp.document_id = ?
|
|
31
|
+
ORDER BY lp.id
|
|
32
|
+
LIMIT ?
|
|
33
|
+
`).all(resolvedDocumentId, MAX_ALL_PROVISIONS);
|
|
34
|
+
if (total > MAX_ALL_PROVISIONS) {
|
|
35
|
+
return {
|
|
36
|
+
results: {
|
|
37
|
+
provisions: rows,
|
|
38
|
+
truncated: true,
|
|
39
|
+
total,
|
|
40
|
+
},
|
|
41
|
+
_metadata: generateResponseMetadata(db),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
results: rows,
|
|
46
|
+
_metadata: generateResponseMetadata(db)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const row = db.prepare(`
|
|
50
|
+
SELECT
|
|
51
|
+
lp.document_id,
|
|
52
|
+
ld.title as document_title,
|
|
53
|
+
ld.status as document_status,
|
|
54
|
+
lp.provision_ref,
|
|
55
|
+
lp.chapter,
|
|
56
|
+
lp.section,
|
|
57
|
+
lp.title,
|
|
58
|
+
lp.content
|
|
59
|
+
FROM legal_provisions lp
|
|
60
|
+
JOIN legal_documents ld ON ld.id = lp.document_id
|
|
61
|
+
WHERE lp.document_id = ? AND (lp.provision_ref = ? OR lp.section = ?)
|
|
62
|
+
`).get(resolvedDocumentId, provisionRef, provisionRef);
|
|
63
|
+
if (!row) {
|
|
64
|
+
return {
|
|
65
|
+
results: null,
|
|
66
|
+
_metadata: generateResponseMetadata(db)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
results: row,
|
|
71
|
+
_metadata: generateResponseMetadata(db)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=get-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-provision.js","sourceRoot":"","sources":["../../src/tools/get-provision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAgCnF,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAY,EACZ,KAAwB;IAExB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC;IAEhG,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAE1D,qFAAqF;IACrF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,sEAAsE,CACvE,CAAC,GAAG,CAAC,kBAAkB,CAAkC,CAAC;QAC3D,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAevB,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAmB,CAAC;QAEjE,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE;oBACP,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,IAAI;oBACf,KAAK;iBACN;gBACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;GAatB,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,YAAY,EAAE,YAAY,CAA6B,CAAC;IAEnF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Returns metadata about data sources, coverage, and freshness.
|
|
3
|
+
*
|
|
4
|
+
* Required by the Ansvar Law MCP standard tool set.
|
|
5
|
+
*/
|
|
6
|
+
import type { Database } from '@ansvar/mcp-sqlite';
|
|
7
|
+
import { type ToolResponse } from '../utils/metadata.js';
|
|
8
|
+
export interface ListSourcesResult {
|
|
9
|
+
jurisdiction: string;
|
|
10
|
+
sources: Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
authority: string;
|
|
13
|
+
url: string;
|
|
14
|
+
license: string;
|
|
15
|
+
coverage: string;
|
|
16
|
+
languages: string[];
|
|
17
|
+
}>;
|
|
18
|
+
database: {
|
|
19
|
+
tier: string;
|
|
20
|
+
schema_version: string;
|
|
21
|
+
built_at: string;
|
|
22
|
+
document_count: number;
|
|
23
|
+
provision_count: number;
|
|
24
|
+
eu_document_count: number;
|
|
25
|
+
};
|
|
26
|
+
limitations: string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function listSources(db: Database): Promise<ToolResponse<ListSourcesResult>>;
|
|
29
|
+
//# 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;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAoBD,wBAAsB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAqDxF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_sources — Returns metadata about data sources, coverage, and freshness.
|
|
3
|
+
*
|
|
4
|
+
* Required by the Ansvar Law MCP standard tool set.
|
|
5
|
+
*/
|
|
6
|
+
import { generateResponseMetadata } from '../utils/metadata.js';
|
|
7
|
+
function safeCount(db, sql) {
|
|
8
|
+
try {
|
|
9
|
+
const row = db.prepare(sql).get();
|
|
10
|
+
return row ? Number(row.count) : 0;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function safeMetaValue(db, key) {
|
|
17
|
+
try {
|
|
18
|
+
const row = db.prepare('SELECT value FROM db_metadata WHERE key = ?').get(key);
|
|
19
|
+
return row?.value ?? 'unknown';
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return 'unknown';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function listSources(db) {
|
|
26
|
+
const documentCount = safeCount(db, 'SELECT COUNT(*) as count FROM legal_documents');
|
|
27
|
+
const provisionCount = safeCount(db, 'SELECT COUNT(*) as count FROM legal_provisions');
|
|
28
|
+
const euDocumentCount = safeCount(db, 'SELECT COUNT(*) as count FROM eu_documents');
|
|
29
|
+
return {
|
|
30
|
+
results: {
|
|
31
|
+
jurisdiction: 'India (IN)',
|
|
32
|
+
sources: [
|
|
33
|
+
{
|
|
34
|
+
name: 'India Code (NIC)',
|
|
35
|
+
authority: 'Ministry of Law and Justice, Government of India / National Informatics Centre',
|
|
36
|
+
url: 'https://www.indiacode.nic.in',
|
|
37
|
+
license: 'Government Open Data (Open Government Data Platform India)',
|
|
38
|
+
coverage: 'All Central Acts of Parliament including DPDPA 2023, IT Act 2000, Companies Act 2013, Consumer Protection Act 2019, Aadhaar Act 2016.',
|
|
39
|
+
languages: ['en', 'hi'],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Legislative Department',
|
|
43
|
+
authority: 'Legislative Department, Ministry of Law and Justice',
|
|
44
|
+
url: 'https://legislative.gov.in',
|
|
45
|
+
license: 'Government Open Data',
|
|
46
|
+
coverage: 'Subordinate legislation, IT Rules (SPDI Rules 2011, Intermediary Guidelines 2021), gazette notifications.',
|
|
47
|
+
languages: ['en', 'hi'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'MeitY',
|
|
51
|
+
authority: 'Ministry of Electronics and Information Technology',
|
|
52
|
+
url: 'https://www.meity.gov.in',
|
|
53
|
+
license: 'Government Open Data',
|
|
54
|
+
coverage: 'IT Act rules, CERT-In directions, DPDPA rules as notified.',
|
|
55
|
+
languages: ['en'],
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
database: {
|
|
59
|
+
tier: safeMetaValue(db, 'tier'),
|
|
60
|
+
schema_version: safeMetaValue(db, 'schema_version'),
|
|
61
|
+
built_at: safeMetaValue(db, 'built_at'),
|
|
62
|
+
document_count: documentCount,
|
|
63
|
+
provision_count: provisionCount,
|
|
64
|
+
eu_document_count: euDocumentCount,
|
|
65
|
+
},
|
|
66
|
+
limitations: [
|
|
67
|
+
`Covers ${documentCount.toLocaleString()} Central Acts of Parliament. State Acts are not yet included.`,
|
|
68
|
+
'Provisions with sub-sections store the introductory text at the section level; sub-sections are stored as separate provisions.',
|
|
69
|
+
'EU/international cross-references (e.g., DPDPA-GDPR mappings) are curated and may not capture all indirect references.',
|
|
70
|
+
'Supreme Court judgments and High Court interpretations are not yet included.',
|
|
71
|
+
'Hindi translations are available for select Acts but may not be complete.',
|
|
72
|
+
'Always verify against official India Code (indiacode.nic.in) publications when legal certainty is required.',
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
_metadata: generateResponseMetadata(db),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# 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;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAqB,MAAM,sBAAsB,CAAC;AAuBnF,SAAS,SAAS,CAAC,EAAY,EAAE,GAAW;IAC1C,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,SAAS,aAAa,CAAC,EAAY,EAAE,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAkC,CAAC;QAChH,OAAO,GAAG,EAAE,KAAK,IAAI,SAAS,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAY;IAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,EAAE,gDAAgD,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,SAAS,CAAC,EAAE,EAAE,4CAA4C,CAAC,CAAC;IAEpF,OAAO;QACL,OAAO,EAAE;YACP,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,kBAAkB;oBACxB,SAAS,EAAE,gFAAgF;oBAC3F,GAAG,EAAE,8BAA8B;oBACnC,OAAO,EAAE,4DAA4D;oBACrE,QAAQ,EAAE,uIAAuI;oBACjJ,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;iBACxB;gBACD;oBACE,IAAI,EAAE,wBAAwB;oBAC9B,SAAS,EAAE,qDAAqD;oBAChE,GAAG,EAAE,4BAA4B;oBACjC,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EAAE,2GAA2G;oBACrH,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;iBACxB;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,oDAAoD;oBAC/D,GAAG,EAAE,0BAA0B;oBAC/B,OAAO,EAAE,sBAAsB;oBAC/B,QAAQ,EAAE,4DAA4D;oBACtE,SAAS,EAAE,CAAC,IAAI,CAAC;iBAClB;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;gBAC/B,cAAc,EAAE,aAAa,CAAC,EAAE,EAAE,gBAAgB,CAAC;gBACnD,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,UAAU,CAAC;gBACvC,cAAc,EAAE,aAAa;gBAC7B,eAAe,EAAE,cAAc;gBAC/B,iBAAiB,EAAE,eAAe;aACnC;YACD,WAAW,EAAE;gBACX,UAAU,aAAa,CAAC,cAAc,EAAE,+DAA+D;gBACvG,gIAAgI;gBAChI,wHAAwH;gBACxH,8EAA8E;gBAC9E,2EAA2E;gBAC3E,6GAA6G;aAC9G;SACF;QACD,SAAS,EAAE,wBAAwB,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registry for India 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 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(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,QAAQ,MAAM,oBAAoB,CAAC;AAc1C,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,eAAO,MAAM,KAAK,EAAE,IAAI,EAiTvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAEzD;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,EACjC,OAAO,CAAC,EAAE,YAAY,GACrB,IAAI,CA8EN"}
|