@hotscots/mcp 1.0.0 → 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/dist/index.js CHANGED
@@ -4,18 +4,28 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
4
4
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
5
  import express from "express";
6
6
  import { z } from "zod";
7
- const API_BASE_URL = process.env.HOTSCOTS_API_URL ?? "https://api.hotscots.app/v1";
7
+ // ─── Config ──────────────────────────────────────────────────────────────────
8
+ const API_BASE_URL = process.env.HOTSCOTS_API_URL ?? "https://api.hotscots.app/functions/v1/api";
8
9
  const CHARACTER_LIMIT = 25000;
10
+ var EndpointType;
11
+ (function (EndpointType) {
12
+ EndpointType["HOTS"] = "hots";
13
+ EndpointType["COTS"] = "cots";
14
+ EndpointType["OTHER"] = "other";
15
+ })(EndpointType || (EndpointType = {}));
9
16
  var ResponseFormat;
10
17
  (function (ResponseFormat) {
11
18
  ResponseFormat["MARKDOWN"] = "markdown";
12
19
  ResponseFormat["JSON"] = "json";
13
20
  })(ResponseFormat || (ResponseFormat = {}));
14
- // --- API client ---
15
- async function apiRequest(path, params) {
16
- const apiKey = process.env.HOTSCOTS_API_KEY;
17
- if (!apiKey)
18
- throw new Error("HOTSCOTS_API_KEY environment variable is not set");
21
+ // ─── API client ───────────────────────────────────────────────────────────────
22
+ function getApiKey() {
23
+ const key = process.env.HOTSCOTS_API_KEY;
24
+ if (!key)
25
+ throw new Error("HOTSCOTS_API_KEY environment variable is not set.");
26
+ return key;
27
+ }
28
+ async function apiGet(path, params) {
19
29
  const url = new URL(`${API_BASE_URL}${path}`);
20
30
  if (params) {
21
31
  for (const [k, v] of Object.entries(params)) {
@@ -25,19 +35,20 @@ async function apiRequest(path, params) {
25
35
  }
26
36
  const res = await fetch(url.toString(), {
27
37
  headers: {
28
- Authorization: `Bearer ${apiKey}`,
38
+ Authorization: `Bearer ${getApiKey()}`,
29
39
  Accept: "application/json",
30
40
  },
31
41
  signal: AbortSignal.timeout(30_000),
32
42
  });
33
43
  if (!res.ok) {
34
- switch (res.status) {
35
- case 401: throw new Error("Unauthorized — check your HOTSCOTS_API_KEY.");
36
- case 403: throw new Error("Forbidden — you don't have access to this resource.");
37
- case 404: throw new Error("Not found — the requested resource does not exist.");
38
- case 429: throw new Error("Rate limit exceeded — please wait before retrying.");
39
- default: throw new Error(`API error ${res.status}: ${res.statusText}`);
44
+ let message = `API error ${res.status}`;
45
+ try {
46
+ const body = (await res.json());
47
+ if (body.error)
48
+ message = body.error;
40
49
  }
50
+ catch { /* ignore */ }
51
+ throw new Error(message);
41
52
  }
42
53
  return res.json();
43
54
  }
@@ -47,293 +58,312 @@ function handleError(err) {
47
58
  function truncate(text) {
48
59
  if (text.length <= CHARACTER_LIMIT)
49
60
  return text;
50
- return text.slice(0, CHARACTER_LIMIT) + "\n\n[Response truncated. Use pagination to see more.]";
61
+ return (text.slice(0, CHARACTER_LIMIT) +
62
+ "\n\n[Response truncated — use a higher offset or tighter filters to page through results.]");
51
63
  }
52
- // --- Zod schemas ---
53
- const PaginationSchema = z.object({
54
- limit: z.number().int().min(1).max(100).default(20).describe("Max results to return (1–100)"),
55
- offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination"),
56
- });
57
- const ResponseFormatSchema = z.nativeEnum(ResponseFormat)
64
+ // ─── Shared schemas ───────────────────────────────────────────────────────────
65
+ const PaginationSchema = {
66
+ limit: z
67
+ .number()
68
+ .int()
69
+ .min(1)
70
+ .max(1000)
71
+ .default(50)
72
+ .describe("Records per page (1–1000, default 50)"),
73
+ offset: z
74
+ .number()
75
+ .int()
76
+ .min(0)
77
+ .default(0)
78
+ .describe("Records to skip for pagination (default 0)"),
79
+ };
80
+ const ResponseFormatSchema = z
81
+ .nativeEnum(ResponseFormat)
58
82
  .default(ResponseFormat.MARKDOWN)
59
83
  .describe("Output format: 'markdown' for human-readable, 'json' for machine-readable");
60
- // --- MCP Server ---
84
+ // ─── Formatters ───────────────────────────────────────────────────────────────
85
+ function starsFor(rating) {
86
+ const r = Math.round(rating);
87
+ return "★".repeat(r) + "☆".repeat(Math.max(0, 5 - r));
88
+ }
89
+ function formatReviews(data, endpointLabel, pagination) {
90
+ const lines = [
91
+ `# Hots&Cots — ${endpointLabel} Reviews`,
92
+ `_Showing ${pagination.returned} records (offset ${pagination.offset}, limit ${pagination.limit})_`,
93
+ "",
94
+ ];
95
+ for (const r of data) {
96
+ lines.push(`## ${starsFor(r.rating)} ${r.title}`);
97
+ lines.push(`**Installation**: ${r.installation}`);
98
+ if (r.branch)
99
+ lines.push(`**Branch**: ${r.branch}`);
100
+ lines.push(`**Date**: ${new Date(r.created_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" })}`);
101
+ if (r.tags?.length)
102
+ lines.push(`**Tags**: ${r.tags.join(", ")}`);
103
+ if (r.feedback) {
104
+ lines.push("");
105
+ lines.push(r.feedback);
106
+ }
107
+ lines.push("");
108
+ lines.push("---");
109
+ lines.push("");
110
+ }
111
+ if (pagination.returned === pagination.limit) {
112
+ lines.push(`_More results available — use offset=${pagination.offset + pagination.limit} to continue._`);
113
+ }
114
+ return lines.join("\n");
115
+ }
116
+ function formatInstallations(data) {
117
+ const sorted = [...data].sort((a, b) => b.counts.total - a.counts.total);
118
+ const lines = [
119
+ `# Hots&Cots — Military Installations (${data.length} total)`,
120
+ "",
121
+ "| Installation | Barracks | Dining | Other | Total |",
122
+ "|---|---:|---:|---:|---:|",
123
+ ];
124
+ for (const inst of sorted) {
125
+ lines.push(`| ${inst.installation} | ${inst.counts.cots} | ${inst.counts.hots} | ${inst.counts.other} | **${inst.counts.total}** |`);
126
+ }
127
+ return lines.join("\n");
128
+ }
129
+ // ─── MCP Server ───────────────────────────────────────────────────────────────
61
130
  const server = new McpServer({
62
- name: "hotscots-mcp-server",
131
+ name: "Hots&Cots",
63
132
  version: "1.0.0",
64
133
  });
65
- // Tool: search installations
66
- server.registerTool("hotscots_search_installations", {
67
- title: "Search Military Installations",
68
- description: `Search for U.S. military installations (bases, posts, camps, forts, stations) in the Hots&Cots database.
69
-
70
- Args:
71
- - query (string): Name, abbreviation, or keyword (e.g., "Fort Liberty", "Bragg", "Camp Lejeune")
72
- - branch (string, optional): Filter by military branch — "Army", "Navy", "Air Force", "Marines", "Coast Guard", "Space Force"
73
- - state (string, optional): Two-letter US state abbreviation (e.g., "NC", "TX")
74
- - limit (number): Max results, 1–100 (default: 20)
75
- - offset (number): Pagination offset (default: 0)
76
- - response_format: 'markdown' or 'json'
77
-
78
- Returns:
79
- List of installations with id, name, branch, state, and city.
134
+ // ── Tool: health check ────────────────────────────────────────────────────────
135
+ server.registerTool("hotscots_health", {
136
+ title: "API Health Check",
137
+ description: `Verify that your Hots&Cots API key is valid and the service is reachable.
80
138
 
81
- Examples:
82
- - "Find Army bases in North Carolina" → query="", branch="Army", state="NC"
83
- - "Search for Camp Pendleton" → query="Camp Pendleton"`,
84
- inputSchema: z.object({
85
- query: z.string().max(200).default("").describe("Search keyword (name, abbreviation, or location)"),
86
- branch: z.string().optional().describe("Military branch filter"),
87
- state: z.string().length(2).optional().describe("US state abbreviation (e.g., NC)"),
88
- ...PaginationSchema.shape,
89
- response_format: ResponseFormatSchema,
90
- }),
139
+ Returns { success, status, timestamp } on success.
140
+ Use this to diagnose connectivity or authentication problems before running other tools.`,
141
+ inputSchema: z.object({}),
91
142
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
92
- }, async (params) => {
143
+ }, async () => {
93
144
  try {
94
- const result = await apiRequest("/installations", {
95
- q: params.query || undefined,
96
- branch: params.branch,
97
- state: params.state,
98
- limit: params.limit,
99
- offset: params.offset,
100
- });
101
- if (!result.data.length) {
102
- return { content: [{ type: "text", text: "No installations found matching your search." }] };
103
- }
104
- let text;
105
- if (params.response_format === ResponseFormat.JSON) {
106
- text = JSON.stringify(result, null, 2);
107
- }
108
- else {
109
- const lines = [
110
- `# Military Installations (${result.total} total, showing ${result.data.length})`,
111
- "",
112
- ];
113
- for (const inst of result.data) {
114
- lines.push(`## ${inst.name} (\`${inst.id}\`)`);
115
- lines.push(`- **Branch**: ${inst.branch}`);
116
- lines.push(`- **Location**: ${[inst.city, inst.state, inst.country].filter(Boolean).join(", ")}`);
117
- lines.push("");
118
- }
119
- if (result.has_more)
120
- lines.push(`_Use offset=${result.next_offset} to see more._`);
121
- text = lines.join("\n");
122
- }
123
- return { content: [{ type: "text", text: truncate(text) }], structuredContent: result };
145
+ const result = await apiGet("/health");
146
+ return {
147
+ content: [{ type: "text", text: `✅ API is healthy\n- Status: ${result.status}\n- Time: ${result.timestamp}` }],
148
+ };
124
149
  }
125
150
  catch (err) {
126
151
  return { content: [{ type: "text", text: handleError(err) }] };
127
152
  }
128
153
  });
129
- // Tool: get installation
130
- server.registerTool("hotscots_get_installation", {
131
- title: "Get Installation Details",
132
- description: `Get detailed information about a specific military installation by its ID.
133
-
134
- Args:
135
- - installation_id (string): The installation ID from hotscots_search_installations
136
- - response_format: 'markdown' or 'json'
154
+ // ── Tool: list installations ──────────────────────────────────────────────────
155
+ server.registerTool("hotscots_list_installations", {
156
+ title: "List Military Installations",
157
+ description: `List every military installation that has at least one review in the Hots&Cots database, with a breakdown of review counts by type.
137
158
 
138
159
  Returns:
139
- Full installation record including name, branch, location, and review summary stats.`,
160
+ - installation: name including state, e.g. "Fort Liberty, North Carolina"
161
+ - counts.cots: number of barracks reviews
162
+ - counts.hots: number of dining (DFAC) reviews
163
+ - counts.other: number of other facility reviews
164
+ - counts.total: combined total
165
+
166
+ Use this to discover valid installation names before fetching reviews. Results are sorted by total review count (most-reviewed first).
167
+
168
+ Args:
169
+ - filter (string, optional): Case-insensitive substring to narrow by installation name (e.g. "Texas", "Fort", "Camp")
170
+ - response_format: 'markdown' (default) or 'json'`,
140
171
  inputSchema: z.object({
141
- installation_id: z.string().min(1).describe("Installation ID (from search results)"),
172
+ filter: z
173
+ .string()
174
+ .optional()
175
+ .describe("Optional substring filter on installation name (case-insensitive)"),
142
176
  response_format: ResponseFormatSchema,
143
177
  }),
144
178
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
145
179
  }, async (params) => {
146
180
  try {
147
- const inst = await apiRequest(`/installations/${params.installation_id}`);
148
- let text;
149
- if (params.response_format === ResponseFormat.JSON) {
150
- text = JSON.stringify(inst, null, 2);
181
+ const result = await apiGet("/installations");
182
+ let data = result.data;
183
+ if (params.filter) {
184
+ const q = params.filter.toLowerCase();
185
+ data = data.filter((i) => i.installation.toLowerCase().includes(q));
151
186
  }
152
- else {
153
- text = [
154
- `# ${inst.name}`,
155
- `- **ID**: \`${inst.id}\``,
156
- `- **Branch**: ${inst.branch}`,
157
- `- **Location**: ${[inst.city, inst.state, inst.country].filter(Boolean).join(", ")}`,
158
- ].join("\n");
187
+ if (!data.length) {
188
+ return { content: [{ type: "text", text: `No installations found matching "${params.filter}".` }] };
159
189
  }
160
- return { content: [{ type: "text", text }], structuredContent: inst };
190
+ const text = params.response_format === ResponseFormat.JSON
191
+ ? JSON.stringify({ count: data.length, data }, null, 2)
192
+ : formatInstallations(data);
193
+ return {
194
+ content: [{ type: "text", text: truncate(text) }],
195
+ structuredContent: { count: data.length, data },
196
+ };
161
197
  }
162
198
  catch (err) {
163
199
  return { content: [{ type: "text", text: handleError(err) }] };
164
200
  }
165
201
  });
166
- // Tool: get barracks reviews
202
+ // ── Tool: barracks (cots) reviews ─────────────────────────────────────────────
167
203
  server.registerTool("hotscots_get_barracks_reviews", {
168
204
  title: "Get Barracks Reviews",
169
- description: `Fetch barracks (housing) reviews for a military installation.
205
+ description: `Fetch paginated barracks / housing (Cots) reviews from the Hots&Cots database.
170
206
 
171
- Args:
172
- - installation_id (string): Installation ID from hotscots_search_installations
173
- - building (string, optional): Filter by specific building or barracks name/number
174
- - min_rating (number, optional): Minimum star rating 1–5
175
- - limit (number): Max results, 1–100 (default: 20)
176
- - offset (number): Pagination offset (default: 0)
177
- - response_format: 'markdown' or 'json'
207
+ Each review may include fields like: rating (1–5), feedback, tags, branch, mold_issues, pest_issues, working_air_heat, working_furniture, accessible_laundry, private_sleeping_area, lockable_doors, dpw_satisfaction_rating, is_privatized_barracks, and more.
178
208
 
179
- Returns:
180
- Paginated list of barracks reviews with ratings, descriptions, and dates.
209
+ Args:
210
+ - installation (string, optional): Filter to a specific installation name (partial match, case-insensitive). Use hotscots_list_installations to find exact names.
211
+ - limit (integer): Records per page, 1–1000 (default 50)
212
+ - offset (integer): Records to skip (default 0)
213
+ - response_format: 'markdown' (default) or 'json'
181
214
 
182
215
  Examples:
183
- - "Show me barracks reviews for Fort Liberty" → first get installation ID, then call with that ID
184
- - "Find highly rated barracks at Bragg" → min_rating=4`,
216
+ - "Barracks reviews at Fort Liberty" → installation="Fort Liberty"
217
+ - "Show mold complaints" → fetch reviews and look for mold_issues=true in the results`,
185
218
  inputSchema: z.object({
186
- installation_id: z.string().min(1).describe("Installation ID"),
187
- building: z.string().optional().describe("Filter by building name or number"),
188
- min_rating: z.number().int().min(1).max(5).optional().describe("Minimum star rating (1–5)"),
189
- ...PaginationSchema.shape,
219
+ installation: z
220
+ .string()
221
+ .optional()
222
+ .describe("Filter by installation name (partial, case-insensitive)"),
223
+ ...PaginationSchema,
190
224
  response_format: ResponseFormatSchema,
191
225
  }),
192
226
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
193
227
  }, async (params) => {
194
228
  try {
195
- const result = await apiRequest(`/installations/${params.installation_id}/reviews`, {
196
- category: "barracks",
197
- building: params.building,
198
- min_rating: params.min_rating,
199
- limit: params.limit,
200
- offset: params.offset,
229
+ const result = await apiGet("/reviews", {
230
+ endpoint: EndpointType.COTS,
231
+ limit: params.installation ? 1000 : params.limit, // fetch more if we need to filter
232
+ offset: params.installation ? 0 : params.offset,
201
233
  });
202
- if (!result.data.length) {
203
- return { content: [{ type: "text", text: "No barracks reviews found for this installation." }] };
234
+ let data = result.data;
235
+ if (params.installation) {
236
+ const q = params.installation.toLowerCase();
237
+ data = data.filter((r) => r.installation.toLowerCase().includes(q));
238
+ // apply limit/offset after filtering
239
+ data = data.slice(params.offset, params.offset + params.limit);
240
+ }
241
+ if (!data.length) {
242
+ const where = params.installation ? ` for "${params.installation}"` : "";
243
+ return { content: [{ type: "text", text: `No barracks reviews found${where}.` }] };
204
244
  }
245
+ const pagination = { limit: params.limit, offset: params.offset, returned: data.length };
205
246
  const text = params.response_format === ResponseFormat.JSON
206
- ? JSON.stringify(result, null, 2)
207
- : formatReviews(result, "Barracks");
208
- return { content: [{ type: "text", text: truncate(text) }], structuredContent: result };
247
+ ? JSON.stringify({ endpoint: "cots", data, pagination }, null, 2)
248
+ : formatReviews(data, "Barracks (Cots)", pagination);
249
+ return {
250
+ content: [{ type: "text", text: truncate(text) }],
251
+ structuredContent: { endpoint: "cots", data, pagination },
252
+ };
209
253
  }
210
254
  catch (err) {
211
255
  return { content: [{ type: "text", text: handleError(err) }] };
212
256
  }
213
257
  });
214
- // Tool: get DFAC reviews
258
+ // ── Tool: dining / DFAC (hots) reviews ───────────────────────────────────────
215
259
  server.registerTool("hotscots_get_dfac_reviews", {
216
- title: "Get DFAC Reviews",
217
- description: `Fetch DFAC (dining facility) reviews for a military installation.
260
+ title: "Get DFAC / Dining Reviews",
261
+ description: `Fetch paginated dining facility / DFAC (Hots) reviews from the Hots&Cots database.
218
262
 
219
- Args:
220
- - installation_id (string): Installation ID from hotscots_search_installations
221
- - building (string, optional): Filter by specific DFAC name or building
222
- - min_rating (number, optional): Minimum star rating 1–5
223
- - limit (number): Max results, 1–100 (default: 20)
224
- - offset (number): Pagination offset (default: 0)
225
- - response_format: 'markdown' or 'json'
263
+ Each review may include fields like: rating (1–5), feedback, tags, branch, dfac_name, breakfast_ranking, lunch_ranking, dinner_ranking, dfac_choices, dfac_healthy, dfac_filling, dfac_temp, dfac_police, has_shuttle, walking_distance, kiosk_level, inedible_food_issue, and more.
226
264
 
227
- Returns:
228
- Paginated list of DFAC reviews with ratings, descriptions, and dates.
265
+ Args:
266
+ - installation (string, optional): Filter to a specific installation name (partial match, case-insensitive). Use hotscots_list_installations to find exact names.
267
+ - limit (integer): Records per page, 1–1000 (default 50)
268
+ - offset (integer): Records to skip (default 0)
269
+ - response_format: 'markdown' (default) or 'json'
229
270
 
230
271
  Examples:
231
- - "What do soldiers think of the chow hall at Camp Lejeune?" → get installation ID, then call this tool
232
- - "Find DFACs rated above 3 stars at Fort Campbell" → min_rating=4`,
272
+ - "DFAC reviews at Camp Lejeune" → installation="Camp Lejeune"
273
+ - "Which installations have the best chow?" → use hotscots_list_installations, then compare average ratings`,
233
274
  inputSchema: z.object({
234
- installation_id: z.string().min(1).describe("Installation ID"),
235
- building: z.string().optional().describe("Filter by DFAC name or building"),
236
- min_rating: z.number().int().min(1).max(5).optional().describe("Minimum star rating (1–5)"),
237
- ...PaginationSchema.shape,
275
+ installation: z
276
+ .string()
277
+ .optional()
278
+ .describe("Filter by installation name (partial, case-insensitive)"),
279
+ ...PaginationSchema,
238
280
  response_format: ResponseFormatSchema,
239
281
  }),
240
282
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
241
283
  }, async (params) => {
242
284
  try {
243
- const result = await apiRequest(`/installations/${params.installation_id}/reviews`, {
244
- category: "dfac",
245
- building: params.building,
246
- min_rating: params.min_rating,
247
- limit: params.limit,
248
- offset: params.offset,
285
+ const result = await apiGet("/reviews", {
286
+ endpoint: EndpointType.HOTS,
287
+ limit: params.installation ? 1000 : params.limit,
288
+ offset: params.installation ? 0 : params.offset,
249
289
  });
250
- if (!result.data.length) {
251
- return { content: [{ type: "text", text: "No DFAC reviews found for this installation." }] };
290
+ let data = result.data;
291
+ if (params.installation) {
292
+ const q = params.installation.toLowerCase();
293
+ data = data.filter((r) => r.installation.toLowerCase().includes(q));
294
+ data = data.slice(params.offset, params.offset + params.limit);
295
+ }
296
+ if (!data.length) {
297
+ const where = params.installation ? ` for "${params.installation}"` : "";
298
+ return { content: [{ type: "text", text: `No dining reviews found${where}.` }] };
252
299
  }
300
+ const pagination = { limit: params.limit, offset: params.offset, returned: data.length };
253
301
  const text = params.response_format === ResponseFormat.JSON
254
- ? JSON.stringify(result, null, 2)
255
- : formatReviews(result, "DFAC");
256
- return { content: [{ type: "text", text: truncate(text) }], structuredContent: result };
302
+ ? JSON.stringify({ endpoint: "hots", data, pagination }, null, 2)
303
+ : formatReviews(data, "Dining / DFAC (Hots)", pagination);
304
+ return {
305
+ content: [{ type: "text", text: truncate(text) }],
306
+ structuredContent: { endpoint: "hots", data, pagination },
307
+ };
257
308
  }
258
309
  catch (err) {
259
310
  return { content: [{ type: "text", text: handleError(err) }] };
260
311
  }
261
312
  });
262
- // Tool: search reviews across installations
263
- server.registerTool("hotscots_search_reviews", {
264
- title: "Search Reviews",
265
- description: `Full-text search across all Hots&Cots reviews (barracks and DFAC) by keyword.
313
+ // ── Tool: other facilities ────────────────────────────────────────────────────
314
+ server.registerTool("hotscots_get_other_reviews", {
315
+ title: "Get Other Facility Reviews",
316
+ description: `Fetch paginated reviews of other on-base facilities (not barracks or DFACs) from the Hots&Cots database.
266
317
 
267
- Args:
268
- - query (string): Keyword or phrase to search in review titles and body text
269
- - category (string, optional): Filter to 'barracks' or 'dfac' reviews only
270
- - installation_id (string, optional): Scope search to a specific installation
271
- - min_rating (number, optional): Minimum star rating 1–5
272
- - limit (number): Max results, 1–100 (default: 20)
273
- - offset (number): Pagination offset (default: 0)
274
- - response_format: 'markdown' or 'json'
318
+ Covers: Medical clinics, Child Development Centers (CDC), gyms, PX/BX, legal offices, lodging, and moving/transportation services. Use the facility_type field to distinguish between them.
275
319
 
276
- Returns:
277
- Paginated list of matching reviews with installation context.
320
+ Each review may include: facility_type, rating, feedback, branch, recommend_facility, walking_distance, and facility-specific fields (e.g. doctor_wait_times for medical, curriculum_effect for CDC, mover_company for moving).
278
321
 
279
- Examples:
280
- - "Find reviews mentioning mold" → query="mold"
281
- - "Search for DFAC reviews about pizza" → query="pizza", category="dfac"`,
322
+ Args:
323
+ - installation (string, optional): Filter by installation name (partial, case-insensitive)
324
+ - limit (integer): Records per page, 1–1000 (default 50)
325
+ - offset (integer): Records to skip (default 0)
326
+ - response_format: 'markdown' (default) or 'json'`,
282
327
  inputSchema: z.object({
283
- query: z.string().min(2).max(200).describe("Search keyword or phrase"),
284
- category: z.enum(["barracks", "dfac"]).optional().describe("Limit to barracks or dfac reviews"),
285
- installation_id: z.string().optional().describe("Scope to a specific installation"),
286
- min_rating: z.number().int().min(1).max(5).optional().describe("Minimum star rating (1–5)"),
287
- ...PaginationSchema.shape,
328
+ installation: z
329
+ .string()
330
+ .optional()
331
+ .describe("Filter by installation name (partial, case-insensitive)"),
332
+ ...PaginationSchema,
288
333
  response_format: ResponseFormatSchema,
289
334
  }),
290
335
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
291
336
  }, async (params) => {
292
337
  try {
293
- const result = await apiRequest("/reviews/search", {
294
- q: params.query,
295
- category: params.category,
296
- installation_id: params.installation_id,
297
- min_rating: params.min_rating,
298
- limit: params.limit,
299
- offset: params.offset,
338
+ const result = await apiGet("/reviews", {
339
+ endpoint: EndpointType.OTHER,
340
+ limit: params.installation ? 1000 : params.limit,
341
+ offset: params.installation ? 0 : params.offset,
300
342
  });
301
- if (!result.data.length) {
302
- return { content: [{ type: "text", text: `No reviews found for "${params.query}".` }] };
343
+ let data = result.data;
344
+ if (params.installation) {
345
+ const q = params.installation.toLowerCase();
346
+ data = data.filter((r) => r.installation.toLowerCase().includes(q));
347
+ data = data.slice(params.offset, params.offset + params.limit);
303
348
  }
349
+ if (!data.length) {
350
+ const where = params.installation ? ` for "${params.installation}"` : "";
351
+ return { content: [{ type: "text", text: `No other facility reviews found${where}.` }] };
352
+ }
353
+ const pagination = { limit: params.limit, offset: params.offset, returned: data.length };
304
354
  const text = params.response_format === ResponseFormat.JSON
305
- ? JSON.stringify(result, null, 2)
306
- : formatReviews(result, "Search Results");
307
- return { content: [{ type: "text", text: truncate(text) }], structuredContent: result };
355
+ ? JSON.stringify({ endpoint: "other", data, pagination }, null, 2)
356
+ : formatReviews(data, "Other Facilities", pagination);
357
+ return {
358
+ content: [{ type: "text", text: truncate(text) }],
359
+ structuredContent: { endpoint: "other", data, pagination },
360
+ };
308
361
  }
309
362
  catch (err) {
310
363
  return { content: [{ type: "text", text: handleError(err) }] };
311
364
  }
312
365
  });
313
- // --- Shared formatters ---
314
- function formatReviews(result, label) {
315
- const lines = [
316
- `# ${label} Reviews (${result.total} total, showing ${result.data.length})`,
317
- "",
318
- ];
319
- for (const r of result.data) {
320
- lines.push(`## ${"★".repeat(r.rating)}${"☆".repeat(5 - r.rating)} ${r.title ?? "(no title)"}`);
321
- if (r.building)
322
- lines.push(`**Building**: ${r.building}`);
323
- if (r.author_rank)
324
- lines.push(`**Reviewer rank**: ${r.author_rank}`);
325
- lines.push(`**Date**: ${new Date(r.created_at).toLocaleDateString()}`);
326
- lines.push("");
327
- lines.push(r.body);
328
- lines.push("");
329
- lines.push("---");
330
- lines.push("");
331
- }
332
- if (result.has_more)
333
- lines.push(`_Use offset=${result.next_offset} to see more._`);
334
- return lines.join("\n");
335
- }
336
- // --- Transport ---
366
+ // ─── Transport ────────────────────────────────────────────────────────────────
337
367
  async function runStdio() {
338
368
  const transport = new StdioServerTransport();
339
369
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hotscots/mcp",
3
- "version": "1.0.0",
4
- "description": "MCP server for the Hots&Cots military QoL API — barracks and DFAC reviews for Claude Desktop, Cursor, and other MCP clients",
3
+ "version": "1.0.1",
4
+ "description": "Official Hots&Cots MCP server — barracks, DFAC, and facility reviews for U.S. military installations",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
7
  "bin": {
@@ -50,4 +50,4 @@
50
50
  "@types/node": "^20.14.0",
51
51
  "typescript": "^5.4.5"
52
52
  }
53
- }
53
+ }