@cyanheads/reliefweb-mcp-server 0.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.
Files changed (77) hide show
  1. package/CLAUDE.md +391 -0
  2. package/Dockerfile +98 -0
  3. package/LICENSE +201 -0
  4. package/README.md +320 -0
  5. package/changelog/0.1.x/0.1.0.md +24 -0
  6. package/changelog/0.1.x/0.1.1.md +29 -0
  7. package/changelog/template.md +119 -0
  8. package/dist/config/server-config.d.ts +14 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +19 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +42 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.d.ts +14 -0
  17. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.d.ts.map +1 -0
  18. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.js +62 -0
  19. package/dist/mcp-server/prompts/definitions/crisis-briefing.prompt.js.map +1 -0
  20. package/dist/mcp-server/resources/definitions/country.resource.d.ts +9 -0
  21. package/dist/mcp-server/resources/definitions/country.resource.d.ts.map +1 -0
  22. package/dist/mcp-server/resources/definitions/country.resource.js +30 -0
  23. package/dist/mcp-server/resources/definitions/country.resource.js.map +1 -0
  24. package/dist/mcp-server/resources/definitions/disaster.resource.d.ts +9 -0
  25. package/dist/mcp-server/resources/definitions/disaster.resource.d.ts.map +1 -0
  26. package/dist/mcp-server/resources/definitions/disaster.resource.js +30 -0
  27. package/dist/mcp-server/resources/definitions/disaster.resource.js.map +1 -0
  28. package/dist/mcp-server/resources/definitions/report.resource.d.ts +9 -0
  29. package/dist/mcp-server/resources/definitions/report.resource.d.ts.map +1 -0
  30. package/dist/mcp-server/resources/definitions/report.resource.js +30 -0
  31. package/dist/mcp-server/resources/definitions/report.resource.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/get-country.tool.d.ts +35 -0
  33. package/dist/mcp-server/tools/definitions/get-country.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/get-country.tool.js +106 -0
  35. package/dist/mcp-server/tools/definitions/get-country.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/get-disaster.tool.d.ts +42 -0
  37. package/dist/mcp-server/tools/definitions/get-disaster.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/get-disaster.tool.js +127 -0
  39. package/dist/mcp-server/tools/definitions/get-disaster.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +30 -0
  41. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/get-report.tool.js +92 -0
  43. package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/list-countries.tool.d.ts +20 -0
  45. package/dist/mcp-server/tools/definitions/list-countries.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/list-countries.tool.js +83 -0
  47. package/dist/mcp-server/tools/definitions/list-countries.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/list-sources.tool.d.ts +22 -0
  49. package/dist/mcp-server/tools/definitions/list-sources.tool.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/list-sources.tool.js +82 -0
  51. package/dist/mcp-server/tools/definitions/list-sources.tool.js.map +1 -0
  52. package/dist/mcp-server/tools/definitions/search-disasters.tool.d.ts +35 -0
  53. package/dist/mcp-server/tools/definitions/search-disasters.tool.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/definitions/search-disasters.tool.js +163 -0
  55. package/dist/mcp-server/tools/definitions/search-disasters.tool.js.map +1 -0
  56. package/dist/mcp-server/tools/definitions/search-jobs.tool.d.ts +32 -0
  57. package/dist/mcp-server/tools/definitions/search-jobs.tool.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/definitions/search-jobs.tool.js +148 -0
  59. package/dist/mcp-server/tools/definitions/search-jobs.tool.js.map +1 -0
  60. package/dist/mcp-server/tools/definitions/search-reports.tool.d.ts +40 -0
  61. package/dist/mcp-server/tools/definitions/search-reports.tool.d.ts.map +1 -0
  62. package/dist/mcp-server/tools/definitions/search-reports.tool.js +191 -0
  63. package/dist/mcp-server/tools/definitions/search-reports.tool.js.map +1 -0
  64. package/dist/mcp-server/tools/definitions/search-training.tool.d.ts +35 -0
  65. package/dist/mcp-server/tools/definitions/search-training.tool.d.ts.map +1 -0
  66. package/dist/mcp-server/tools/definitions/search-training.tool.js +166 -0
  67. package/dist/mcp-server/tools/definitions/search-training.tool.js.map +1 -0
  68. package/dist/services/reliefweb/reliefweb-service.d.ts +103 -0
  69. package/dist/services/reliefweb/reliefweb-service.d.ts.map +1 -0
  70. package/dist/services/reliefweb/reliefweb-service.js +546 -0
  71. package/dist/services/reliefweb/reliefweb-service.js.map +1 -0
  72. package/dist/services/reliefweb/types.d.ts +345 -0
  73. package/dist/services/reliefweb/types.d.ts.map +1 -0
  74. package/dist/services/reliefweb/types.js +7 -0
  75. package/dist/services/reliefweb/types.js.map +1 -0
  76. package/package.json +78 -0
  77. package/server.json +111 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Search humanitarian training and learning opportunities on ReliefWeb.
3
+ * @module mcp-server/tools/definitions/search-training
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const reliefwebSearchTraining: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ text: z.ZodOptional<z.ZodString>;
8
+ country: z.ZodOptional<z.ZodString>;
9
+ source: z.ZodOptional<z.ZodString>;
10
+ format: z.ZodOptional<z.ZodString>;
11
+ career_category: z.ZodOptional<z.ZodString>;
12
+ language: z.ZodOptional<z.ZodString>;
13
+ date_start_from: z.ZodOptional<z.ZodString>;
14
+ date_start_to: z.ZodOptional<z.ZodString>;
15
+ limit: z.ZodDefault<z.ZodNumber>;
16
+ offset: z.ZodDefault<z.ZodNumber>;
17
+ }, z.core.$strip>, z.ZodObject<{
18
+ items: z.ZodArray<z.ZodObject<{
19
+ id: z.ZodNumber;
20
+ title: z.ZodString;
21
+ dateStart: z.ZodOptional<z.ZodString>;
22
+ dateEnd: z.ZodOptional<z.ZodString>;
23
+ dateRegistration: z.ZodOptional<z.ZodString>;
24
+ sources: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ countries: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ themes: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ formats: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ languages: z.ZodOptional<z.ZodArray<z.ZodString>>;
29
+ careerCategories: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
+ urlAlias: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ totalCount: z.ZodNumber;
33
+ message: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>, undefined>;
35
+ //# sourceMappingURL=search-training.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-training.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-training.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGjD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA2KlC,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @fileoverview Search humanitarian training and learning opportunities on ReliefWeb.
3
+ * @module mcp-server/tools/definitions/search-training
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { getReliefWebService } from '../../../services/reliefweb/reliefweb-service.js';
7
+ export const reliefwebSearchTraining = tool('reliefweb_search_training', {
8
+ title: 'Search ReliefWeb Training',
9
+ description: 'Search humanitarian training and learning opportunities on ReliefWeb by country, format, date, source, career category, and language. ' +
10
+ 'Covers workshops, e-learning, conferences, and other capacity-building events. ' +
11
+ 'Training date fields use date.start / date.end — different from report date fields. ' +
12
+ 'Use date_start_from and date_start_to to find upcoming training within a window.',
13
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
14
+ input: z.object({
15
+ text: z
16
+ .string()
17
+ .optional()
18
+ .describe('Full-text search query. Matches against training title and description.'),
19
+ country: z
20
+ .string()
21
+ .optional()
22
+ .describe('ISO 3166-1 alpha-3 country code (e.g., KEN, ETH, COD). Filters to training tagged with this country.'),
23
+ source: z.string().optional().describe('Organization short name. Filters on source.shortname.'),
24
+ format: z
25
+ .string()
26
+ .optional()
27
+ .describe('Training format (e.g., Workshop, E-learning, Conference, Seminar). Filters on format.name.'),
28
+ career_category: z
29
+ .string()
30
+ .optional()
31
+ .describe('Humanitarian career track (e.g., Programme and Project Management, Information and Communications Technology). Filters on career_categories.name.'),
32
+ language: z
33
+ .string()
34
+ .optional()
35
+ .describe('ISO 639-1 language code (e.g., en, fr, es). Filters on language.code.'),
36
+ date_start_from: z
37
+ .string()
38
+ .optional()
39
+ .describe('Training start date lower bound (ISO 8601). Filters on date.start — use to find training starting after a given date.'),
40
+ date_start_to: z
41
+ .string()
42
+ .optional()
43
+ .describe('Training start date upper bound (ISO 8601). Filters on date.start — pair with date_start_from for a window.'),
44
+ limit: z
45
+ .number()
46
+ .int()
47
+ .min(1)
48
+ .max(1000)
49
+ .default(10)
50
+ .describe('Number of results to return (1–1000, default 10). Each call counts against the 1,000-calls/day quota.'),
51
+ offset: z
52
+ .number()
53
+ .int()
54
+ .min(0)
55
+ .default(0)
56
+ .describe('Zero-based offset for pagination. Use with limit and totalCount to page through results.'),
57
+ }),
58
+ output: z.object({
59
+ items: z
60
+ .array(z
61
+ .object({
62
+ id: z.number().describe('ReliefWeb numeric training ID.'),
63
+ title: z.string().describe('Training title.'),
64
+ dateStart: z.string().optional().describe('Training start date (ISO 8601).'),
65
+ dateEnd: z.string().optional().describe('Training end date (ISO 8601).'),
66
+ dateRegistration: z.string().optional().describe('Registration deadline (ISO 8601).'),
67
+ sources: z
68
+ .array(z.string())
69
+ .optional()
70
+ .describe('Organizing organizations (short names).'),
71
+ countries: z
72
+ .array(z.string())
73
+ .optional()
74
+ .describe('Countries tagged on this training.'),
75
+ themes: z.array(z.string()).optional().describe('Humanitarian theme/sector names.'),
76
+ formats: z.array(z.string()).optional().describe('Training format names.'),
77
+ languages: z.array(z.string()).optional().describe('Language codes (ISO 639-1).'),
78
+ careerCategories: z
79
+ .array(z.string())
80
+ .optional()
81
+ .describe('Career category names (humanitarian tracks).'),
82
+ urlAlias: z
83
+ .string()
84
+ .optional()
85
+ .describe('Canonical ReliefWeb URL for this training listing.'),
86
+ })
87
+ .describe('A matching training opportunity.'))
88
+ .describe('Matching training opportunities.'),
89
+ totalCount: z
90
+ .number()
91
+ .describe('Total training listings matching the query before pagination.'),
92
+ message: z
93
+ .string()
94
+ .optional()
95
+ .describe('Recovery hint when results are empty — echoes filters applied and suggests how to broaden.'),
96
+ }),
97
+ async handler(input, ctx) {
98
+ ctx.log.info('reliefweb_search_training', {
99
+ text: input.text,
100
+ country: input.country,
101
+ format: input.format,
102
+ limit: input.limit,
103
+ });
104
+ const result = await getReliefWebService().searchTraining({
105
+ ...(input.text?.trim() ? { text: input.text } : {}),
106
+ ...(input.country?.trim() ? { country: input.country.toUpperCase() } : {}),
107
+ ...(input.source?.trim() ? { source: input.source } : {}),
108
+ ...(input.format?.trim() ? { format: input.format } : {}),
109
+ ...(input.career_category?.trim() ? { careerCategory: input.career_category } : {}),
110
+ ...(input.language?.trim() ? { language: input.language } : {}),
111
+ ...(input.date_start_from?.trim() ? { dateStartFrom: input.date_start_from } : {}),
112
+ ...(input.date_start_to?.trim() ? { dateStartTo: input.date_start_to } : {}),
113
+ limit: input.limit,
114
+ offset: input.offset,
115
+ }, ctx);
116
+ if (result.items.length === 0) {
117
+ const filters = [];
118
+ if (input.text)
119
+ filters.push(`text="${input.text}"`);
120
+ if (input.country)
121
+ filters.push(`country=${input.country}`);
122
+ if (input.format)
123
+ filters.push(`format="${input.format}"`);
124
+ if (input.date_start_from)
125
+ filters.push(`start_from=${input.date_start_from}`);
126
+ return {
127
+ items: [],
128
+ totalCount: 0,
129
+ message: `No training matched ${filters.length > 0 ? filters.join(', ') : 'the given filters'}. ` +
130
+ 'Try broader keywords, remove date range constraints, or check the format spelling.',
131
+ };
132
+ }
133
+ return { items: result.items, totalCount: result.totalCount };
134
+ },
135
+ format: (result) => {
136
+ const lines = [`**Total:** ${result.totalCount} training opportunities`];
137
+ if (result.message)
138
+ lines.push(`\n> ${result.message}`);
139
+ for (const item of result.items) {
140
+ lines.push(`\n## ${item.title}`);
141
+ lines.push(`**ID:** ${item.id}`);
142
+ if (item.sources?.length)
143
+ lines.push(`**Organizer:** ${item.sources.join(', ')}`);
144
+ if (item.formats?.length)
145
+ lines.push(`**Format:** ${item.formats.join(', ')}`);
146
+ if (item.countries?.length)
147
+ lines.push(`**Countries:** ${item.countries.join(', ')}`);
148
+ if (item.careerCategories?.length)
149
+ lines.push(`**Career category:** ${item.careerCategories.join(', ')}`);
150
+ if (item.languages?.length)
151
+ lines.push(`**Languages:** ${item.languages.join(', ')}`);
152
+ if (item.themes?.length)
153
+ lines.push(`**Themes:** ${item.themes.join(', ')}`);
154
+ if (item.dateStart)
155
+ lines.push(`**Starts:** ${item.dateStart}`);
156
+ if (item.dateEnd)
157
+ lines.push(`**Ends:** ${item.dateEnd}`);
158
+ if (item.dateRegistration)
159
+ lines.push(`**Registration deadline:** ${item.dateRegistration}`);
160
+ if (item.urlAlias)
161
+ lines.push(`**URL:** ${item.urlAlias}`);
162
+ }
163
+ return [{ type: 'text', text: lines.join('\n') }];
164
+ },
165
+ });
166
+ //# sourceMappingURL=search-training.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-training.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-training.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @fileoverview ReliefWeb API v2 service — POST query builder, retry, field selection,
3
+ * normalization helpers for all content types.
4
+ * @module services/reliefweb/reliefweb-service
5
+ */
6
+ import type { Context } from '@cyanheads/mcp-ts-core';
7
+ import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
8
+ import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
9
+ import type { CountryDetail, CountrySummary, DisasterDetail, DisasterSummary, FilterCondition, JobSummary, ReportDetail, ReportSummary, SourceSummary, TrainingSummary } from './types.js';
10
+ export declare class ReliefWebService {
11
+ constructor(_appConfig: AppConfig, _storage: StorageService);
12
+ private post;
13
+ private get;
14
+ private buildAndFilter;
15
+ private mergeFilters;
16
+ private makeDateFilter;
17
+ searchReports(params: {
18
+ text?: string;
19
+ country?: string;
20
+ disasterId?: number;
21
+ format?: string;
22
+ theme?: string;
23
+ language?: string;
24
+ source?: string;
25
+ dateFrom?: string;
26
+ dateTo?: string;
27
+ sort?: string;
28
+ includeArchived?: boolean;
29
+ rawFilter?: FilterCondition;
30
+ limit?: number;
31
+ offset?: number;
32
+ }, ctx: Context): Promise<{
33
+ items: ReportSummary[];
34
+ totalCount: number;
35
+ }>;
36
+ getReport(id: number, ctx: Context): Promise<ReportDetail | null>;
37
+ searchDisasters(params: {
38
+ text?: string;
39
+ country?: string;
40
+ disasterType?: string;
41
+ status?: string;
42
+ glide?: string;
43
+ dateFrom?: string;
44
+ dateTo?: string;
45
+ sort?: string;
46
+ includeArchived?: boolean;
47
+ limit?: number;
48
+ offset?: number;
49
+ }, ctx: Context): Promise<{
50
+ items: DisasterSummary[];
51
+ totalCount: number;
52
+ }>;
53
+ getDisaster(id: number, ctx: Context): Promise<DisasterDetail | null>;
54
+ getCountry(iso3: string, ctx: Context): Promise<CountryDetail | null>;
55
+ listCountries(params: {
56
+ crisisOnly?: boolean;
57
+ limit?: number;
58
+ offset?: number;
59
+ }, ctx: Context): Promise<{
60
+ items: CountrySummary[];
61
+ totalCount: number;
62
+ }>;
63
+ searchJobs(params: {
64
+ text?: string;
65
+ country?: string;
66
+ source?: string;
67
+ careerCategory?: string;
68
+ theme?: string;
69
+ experience?: string;
70
+ limit?: number;
71
+ offset?: number;
72
+ }, ctx: Context): Promise<{
73
+ items: JobSummary[];
74
+ totalCount: number;
75
+ }>;
76
+ searchTraining(params: {
77
+ text?: string;
78
+ country?: string;
79
+ source?: string;
80
+ format?: string;
81
+ careerCategory?: string;
82
+ language?: string;
83
+ dateStartFrom?: string;
84
+ dateStartTo?: string;
85
+ limit?: number;
86
+ offset?: number;
87
+ }, ctx: Context): Promise<{
88
+ items: TrainingSummary[];
89
+ totalCount: number;
90
+ }>;
91
+ listSources(params: {
92
+ text?: string;
93
+ type?: string;
94
+ limit?: number;
95
+ offset?: number;
96
+ }, ctx: Context): Promise<{
97
+ items: SourceSummary[];
98
+ totalCount: number;
99
+ }>;
100
+ }
101
+ export declare function initReliefWebService(config: AppConfig, storage: StorageService): void;
102
+ export declare function getReliefWebService(): ReliefWebService;
103
+ //# sourceMappingURL=reliefweb-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliefweb-service.d.ts","sourceRoot":"","sources":["../../../src/services/reliefweb/reliefweb-service.ts"],"names":[],"mappings":"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"}