mcp-grampsweb 1.0.2 → 1.2.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.
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.js +28 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/index.d.ts +26 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +310 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/schemas/common.d.ts +67 -4
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +13 -2
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/entities.d.ts +154 -36
- package/dist/schemas/entities.d.ts.map +1 -1
- package/dist/tools/analysis.d.ts.map +1 -1
- package/dist/tools/analysis.js +134 -56
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/convenience.d.ts +59 -0
- package/dist/tools/convenience.d.ts.map +1 -0
- package/dist/tools/convenience.js +131 -0
- package/dist/tools/convenience.js.map +1 -0
- package/dist/tools/create.d.ts +35 -0
- package/dist/tools/create.d.ts.map +1 -1
- package/dist/tools/create.js +216 -44
- package/dist/tools/create.js.map +1 -1
- package/dist/tools/index.d.ts +253 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list.d.ts +88 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/list.js +222 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +67 -24
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/update.d.ts +662 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +383 -0
- package/dist/tools/update.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +23 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/response.d.ts +34 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +71 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +1 -1
package/dist/tools/search.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Search and retrieval tools
|
|
3
3
|
*/
|
|
4
4
|
import { grampsClient } from "../client.js";
|
|
5
|
-
import { API_ENDPOINTS, ENTITY_ENDPOINT_MAP } from "../constants.js";
|
|
5
|
+
import { API_ENDPOINTS, ENTITY_ENDPOINT_MAP, MESSAGES } from "../constants.js";
|
|
6
6
|
import { searchSchema, findSchema, getEntitySchema } from "../schemas/search.js";
|
|
7
|
-
import {
|
|
7
|
+
import { formatToolResponse, formatEntityList } from "../utils/response.js";
|
|
8
8
|
/**
|
|
9
9
|
* GQL-based search for entities
|
|
10
10
|
*/
|
|
@@ -15,19 +15,36 @@ export async function grampsSearch(params) {
|
|
|
15
15
|
throw new Error(`Unknown entity type: ${entity_type}`);
|
|
16
16
|
}
|
|
17
17
|
const response = await grampsClient.get(endpoint, {
|
|
18
|
-
|
|
18
|
+
gql: query,
|
|
19
19
|
page,
|
|
20
20
|
pagesize,
|
|
21
21
|
});
|
|
22
22
|
// Format response
|
|
23
23
|
if (!response || (Array.isArray(response) && response.length === 0)) {
|
|
24
|
-
return
|
|
24
|
+
return formatToolResponse({
|
|
25
|
+
status: "empty",
|
|
26
|
+
summary: MESSAGES.NO_RESULTS(entity_type, query),
|
|
27
|
+
details: "GQL syntax: property operator value. Examples: gender = 1, primary_name.first_name ~ John",
|
|
28
|
+
});
|
|
25
29
|
}
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
const entities = Array.isArray(response) ? response : [response];
|
|
31
|
+
const formattedEntities = entities.map((obj) => ({
|
|
32
|
+
handle: obj.handle,
|
|
33
|
+
gramps_id: obj.gramps_id,
|
|
34
|
+
// Include type-specific summary field
|
|
35
|
+
...(entity_type === "people" && { name: formatPersonSummary(obj) }),
|
|
36
|
+
...(entity_type === "places" && { name: obj.name?.value || obj.title }),
|
|
37
|
+
...(entity_type === "sources" && { title: obj.title }),
|
|
38
|
+
...(entity_type === "events" && { type: obj.type }),
|
|
29
39
|
}));
|
|
30
|
-
return
|
|
40
|
+
return formatEntityList(entity_type, formattedEntities);
|
|
41
|
+
}
|
|
42
|
+
function formatPersonSummary(person) {
|
|
43
|
+
const p = person;
|
|
44
|
+
if (!p.primary_name)
|
|
45
|
+
return "Unknown";
|
|
46
|
+
const parts = [p.primary_name.first_name, p.primary_name.surname].filter(Boolean);
|
|
47
|
+
return parts.join(" ") || "Unknown";
|
|
31
48
|
}
|
|
32
49
|
/**
|
|
33
50
|
* Full-text search across all entities
|
|
@@ -40,13 +57,18 @@ export async function grampsFind(params) {
|
|
|
40
57
|
pagesize,
|
|
41
58
|
});
|
|
42
59
|
if (!response.data || response.data.length === 0) {
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
60
|
+
return formatToolResponse({
|
|
61
|
+
status: "empty",
|
|
62
|
+
summary: MESSAGES.NO_RESULTS("records", query),
|
|
63
|
+
details: MESSAGES.SEARCH_HINT,
|
|
64
|
+
});
|
|
48
65
|
}
|
|
49
|
-
|
|
66
|
+
const formattedResults = response.data.map((item) => ({
|
|
67
|
+
type: item.object_type,
|
|
68
|
+
handle: item.object.handle,
|
|
69
|
+
gramps_id: item.object.gramps_id,
|
|
70
|
+
}));
|
|
71
|
+
return formatEntityList("records", formattedResults, response.total_count);
|
|
50
72
|
}
|
|
51
73
|
/**
|
|
52
74
|
* Get a specific entity by handle or ID
|
|
@@ -60,7 +82,12 @@ export async function grampsGet(params) {
|
|
|
60
82
|
// Try to get by handle first
|
|
61
83
|
try {
|
|
62
84
|
const response = await grampsClient.get(`${endpoint}${handle}`);
|
|
63
|
-
return
|
|
85
|
+
return formatToolResponse({
|
|
86
|
+
status: "success",
|
|
87
|
+
summary: `Found ${entity_type.replace(/s$/, "")} ${response.gramps_id}`,
|
|
88
|
+
data: response,
|
|
89
|
+
details: `Handle: ${response.handle} - use this handle to reference in other operations.`,
|
|
90
|
+
});
|
|
64
91
|
}
|
|
65
92
|
catch (error) {
|
|
66
93
|
// If not found by handle, try searching by gramps_id
|
|
@@ -69,8 +96,19 @@ export async function grampsGet(params) {
|
|
|
69
96
|
gramps: `gramps_id=${handle}`,
|
|
70
97
|
});
|
|
71
98
|
if (searchResponse && searchResponse.length > 0) {
|
|
72
|
-
|
|
99
|
+
const entity = searchResponse[0];
|
|
100
|
+
return formatToolResponse({
|
|
101
|
+
status: "success",
|
|
102
|
+
summary: `Found ${entity_type.replace(/s$/, "")} ${entity.gramps_id}`,
|
|
103
|
+
data: entity,
|
|
104
|
+
details: `Handle: ${entity.handle} - use this handle to reference in other operations.`,
|
|
105
|
+
});
|
|
73
106
|
}
|
|
107
|
+
return formatToolResponse({
|
|
108
|
+
status: "empty",
|
|
109
|
+
summary: MESSAGES.NOT_FOUND(entity_type.replace(/s$/, ""), handle),
|
|
110
|
+
details: "Use gramps_find to search for the correct handle or ID.",
|
|
111
|
+
});
|
|
74
112
|
}
|
|
75
113
|
throw error;
|
|
76
114
|
}
|
|
@@ -79,9 +117,11 @@ export async function grampsGet(params) {
|
|
|
79
117
|
export const searchTools = {
|
|
80
118
|
gramps_search: {
|
|
81
119
|
name: "gramps_search",
|
|
82
|
-
description: "Search
|
|
83
|
-
"
|
|
84
|
-
"
|
|
120
|
+
description: "Search using GQL (Gramps Query Language) for structured queries. " +
|
|
121
|
+
"USE FOR: Finding entities by attributes (name, date, gender, etc.). " +
|
|
122
|
+
"SYNTAX: property operator value, combined with 'and'/'or'. " +
|
|
123
|
+
"EXAMPLES: primary_name.surname_list[0].surname ~ Smith, gender = 1 (male=1, female=0). " +
|
|
124
|
+
"RETURNS: List of handles - use handles with gramps_get for full details.",
|
|
85
125
|
inputSchema: {
|
|
86
126
|
type: "object",
|
|
87
127
|
properties: {
|
|
@@ -111,9 +151,10 @@ export const searchTools = {
|
|
|
111
151
|
},
|
|
112
152
|
gramps_find: {
|
|
113
153
|
name: "gramps_find",
|
|
114
|
-
description: "Full-text search across
|
|
115
|
-
"
|
|
116
|
-
"
|
|
154
|
+
description: "Full-text search across ALL entity types at once. " +
|
|
155
|
+
"USE FOR: Quick lookup by name, keyword, or ID when you don't know the entity type. " +
|
|
156
|
+
"RETURNS: Mixed results (people, places, sources, etc.) with handles. " +
|
|
157
|
+
"NEXT STEP: Use gramps_get with handle to retrieve full entity details.",
|
|
117
158
|
inputSchema: {
|
|
118
159
|
type: "object",
|
|
119
160
|
properties: {
|
|
@@ -138,8 +179,10 @@ export const searchTools = {
|
|
|
138
179
|
},
|
|
139
180
|
gramps_get: {
|
|
140
181
|
name: "gramps_get",
|
|
141
|
-
description: "
|
|
142
|
-
"
|
|
182
|
+
description: "Retrieve complete details of a specific entity by handle or Gramps ID. " +
|
|
183
|
+
"USE FOR: Getting full record after finding entity in search results. " +
|
|
184
|
+
"REQUIRED: entity_type and handle (from search results). " +
|
|
185
|
+
"RETURNS: Complete entity data including all relationships and attributes.",
|
|
143
186
|
inputSchema: {
|
|
144
187
|
type: "object",
|
|
145
188
|
properties: {
|
package/dist/tools/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|