@access-mcp/announcements 0.1.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/README.md ADDED
@@ -0,0 +1,276 @@
1
+ # ACCESS Support Announcements MCP Server
2
+
3
+ MCP server providing access to ACCESS support announcements, service updates, maintenance notices, and community communications. Stay informed about system changes, training opportunities, policy updates, and community events through the official ACCESS Support portal.
4
+
5
+ ## Usage Examples
6
+
7
+ ### **Stay Updated on Recent Activity**
8
+
9
+ ```
10
+ "What's new with ACCESS?"
11
+ "Show me recent announcements"
12
+ "Any updates from ACCESS Support this week?"
13
+ "What are the latest community announcements?"
14
+ ```
15
+
16
+ ### **Monitor System Maintenance & Issues**
17
+
18
+ ```
19
+ "Are there any GPU maintenance announcements?"
20
+ "Show me maintenance notices for DELTA"
21
+ "What system updates have been posted recently?"
22
+ "Any announcements about Bridges-2 issues?"
23
+ "Tell me about network-related announcements"
24
+ ```
25
+
26
+ ### **Find Training & Educational Content**
27
+
28
+ ```
29
+ "Are there any training workshops announced?"
30
+ "Show me machine learning training announcements"
31
+ "What professional development opportunities are available?"
32
+ "Any upcoming webinars or educational events?"
33
+ ```
34
+
35
+ ### **Track Specific Systems or Communities**
36
+
37
+ ```
38
+ "Show me all announcements about Anvil"
39
+ "What updates are there for the CSSN community?"
40
+ "Any news from the Open OnDemand team?"
41
+ "Show me Pegasus-related announcements"
42
+ ```
43
+
44
+ ### **Search by Topic or Technology**
45
+
46
+ ```
47
+ "Find announcements about cloud computing"
48
+ "Show me AI and machine learning updates"
49
+ "Any announcements about allocation proposals?"
50
+ "What's new with data science resources?"
51
+ "Find announcements about Python or PyTorch"
52
+ ```
53
+
54
+ ### **Time-Based Searches**
55
+
56
+ ```
57
+ "Show me announcements from the past month"
58
+ "What was announced last week?"
59
+ "Find announcements since January 1st, 2024"
60
+ "Show me announcements from the past 6 months"
61
+ ```
62
+
63
+ ## Tools
64
+
65
+ ### get_announcements
66
+
67
+ Search ACCESS support announcements with comprehensive filtering options.
68
+
69
+ **Parameters:**
70
+ - `tags` - Filter by topics (comma-separated). Examples: 'gpu,nvidia', 'machine-learning,ai', 'training,workshop'
71
+ - `ag` - Filter by system/community group. Examples: 'DELTA', 'Anvil', 'ACCESS Support', 'CSSN (Computational Science Support Network)'
72
+ - `relative_start_date` - Filter from relative date. Examples: 'today', '-1 week', '-1 month', '-3 months'
73
+ - `relative_end_date` - Filter to relative date. Examples: 'now', 'today', '-1 week', '+1 week'
74
+ - `start_date` - Filter from exact date (YYYY-MM-DD). Example: '2024-01-01'
75
+ - `end_date` - Filter to exact date (YYYY-MM-DD). Example: '2024-12-31'
76
+ - `limit` - Maximum results (default: 20)
77
+
78
+ **Usage Examples:**
79
+ ```javascript
80
+ // Recent GPU-related announcements
81
+ get_announcements({
82
+ tags: "gpu,nvidia",
83
+ relative_start_date: "-1 month",
84
+ limit: 10
85
+ })
86
+
87
+ // DELTA system announcements from this year
88
+ get_announcements({
89
+ ag: "DELTA",
90
+ start_date: "2024-01-01",
91
+ limit: 15
92
+ })
93
+
94
+ // Training announcements from the past 3 months
95
+ get_announcements({
96
+ tags: "training,professional-development",
97
+ relative_start_date: "-3 months",
98
+ limit: 20
99
+ })
100
+ ```
101
+
102
+ ### get_announcements_by_tags
103
+
104
+ Find announcements about specific topics or systems.
105
+
106
+ **Parameters:**
107
+ - `tags` (required) - Specific topics (comma-separated). Examples: 'gpu,nvidia', 'data-science,python', 'cloud-computing'
108
+ - `limit` - Maximum results (default: 10)
109
+
110
+ **Usage Examples:**
111
+ ```javascript
112
+ // Machine learning and AI announcements
113
+ get_announcements_by_tags({
114
+ tags: "machine-learning,ai,deep-learning",
115
+ limit: 15
116
+ })
117
+
118
+ // Cloud computing updates
119
+ get_announcements_by_tags({
120
+ tags: "cloud-computing,openstack",
121
+ limit: 10
122
+ })
123
+ ```
124
+
125
+ ### get_announcements_by_affinity_group
126
+
127
+ Get announcements for specific ACCESS systems or community groups.
128
+
129
+ **Parameters:**
130
+ - `ag` (required) - System or community name. Examples: 'DELTA', 'Anvil', 'Bridges-2', 'ACCESS Support', 'Open OnDemand'
131
+ - `limit` - Maximum results (default: 10)
132
+
133
+ **Usage Examples:**
134
+ ```javascript
135
+ // All DELTA-related announcements
136
+ get_announcements_by_affinity_group({
137
+ ag: "DELTA",
138
+ limit: 20
139
+ })
140
+
141
+ // Open OnDemand community updates
142
+ get_announcements_by_affinity_group({
143
+ ag: "Open OnDemand",
144
+ limit: 10
145
+ })
146
+ ```
147
+
148
+ ### get_recent_announcements
149
+
150
+ Get the latest announcements from a recent time period.
151
+
152
+ **Parameters:**
153
+ - `period` - Time period to look back. Examples: '1 week', '2 weeks', '1 month', '3 months' (default: '1 month')
154
+ - `limit` - Maximum results (default: 10)
155
+
156
+ **Usage Examples:**
157
+ ```javascript
158
+ // Past week's announcements
159
+ get_recent_announcements({
160
+ period: "1 week",
161
+ limit: 15
162
+ })
163
+
164
+ // Past 3 months overview
165
+ get_recent_announcements({
166
+ period: "3 months",
167
+ limit: 25
168
+ })
169
+ ```
170
+
171
+ ## Popular Tags
172
+
173
+ Based on real ACCESS support announcements, here are commonly used tags:
174
+
175
+ **Systems & Resources:**
176
+ - `gpu`, `nvidia`, `anvil`, `delta`, `bridges-2`, `stampede2`, `stampede3`
177
+ - `cloud-computing`, `openstack`, `kubernetes`, `containers`
178
+
179
+ **Technologies:**
180
+ - `machine-learning`, `ai`, `deep-learning`, `python`, `pytorch`
181
+ - `data-science`, `bioinformatics`, `molecular-dynamics`
182
+ - `mpi`, `openmp`, `cuda`, `singularity`
183
+
184
+ **Activities & Services:**
185
+ - `training`, `professional-development`, `workshop`
186
+ - `allocations-proposal`, `allocation-users`, `allocation-management`
187
+ - `data-transfer`, `storage`, `file-system`
188
+
189
+ **Topics:**
190
+ - `maintenance`, `performance-tuning`, `job-submission`
191
+ - `security`, `networking`, `hpc-operations`
192
+ - `documentation`, `community-outreach`
193
+
194
+ ## Common Affinity Groups
195
+
196
+ **ACCESS Systems:**
197
+ - `ACCESS Support`, `DELTA`, `Anvil`, `Bridges-2`, `DARWIN`
198
+ - `Stampede2`, `stampede3`, `osg`
199
+
200
+ **Community Groups:**
201
+ - `CSSN (Computational Science Support Network)`
202
+ - `Open OnDemand`, `Pegasus`
203
+ - `ACCESS Allocations`
204
+
205
+ ## Response Format
206
+
207
+ All tools return enhanced JSON responses with:
208
+
209
+ ```json
210
+ {
211
+ "total_announcements": 42,
212
+ "filtered_announcements": 10,
213
+ "announcements": [
214
+ {
215
+ "title": "Scheduled Maintenance: DELTA GPU Nodes",
216
+ "body": "DELTA GPU nodes will undergo maintenance...",
217
+ "date": "2024-03-15",
218
+ "formatted_date": "March 15, 2024",
219
+ "author": "ACCESS Support",
220
+ "tags": ["maintenance", "gpu", "delta"],
221
+ "affinity_groups": ["DELTA"],
222
+ "body_preview": "DELTA GPU nodes will undergo maintenance from 9 AM to 5 PM..."
223
+ }
224
+ ],
225
+ "popular_tags": ["gpu", "maintenance", "delta"],
226
+ "filters_applied": {
227
+ "tags": "gpu,maintenance",
228
+ "date_range": "-1 month to now"
229
+ }
230
+ }
231
+ ```
232
+
233
+ ## Installation
234
+
235
+ ```bash
236
+ npm install -g @access-mcp/announcements
237
+ ```
238
+
239
+ ## Configuration
240
+
241
+ ### Claude Desktop
242
+ ```json
243
+ {
244
+ "mcpServers": {
245
+ "access-announcements": {
246
+ "command": "npx",
247
+ "args": ["@access-mcp/announcements"]
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ ### Local Development
254
+ ```json
255
+ {
256
+ "mcpServers": {
257
+ "access-announcements": {
258
+ "command": "/opt/homebrew/bin/node",
259
+ "args": ["/path/to/access_mcp/packages/announcements/dist/index.js"]
260
+ }
261
+ }
262
+ }
263
+ ```
264
+
265
+ ## Testing
266
+
267
+ ```bash
268
+ # Unit tests
269
+ npm test
270
+
271
+ # Integration tests (requires API access)
272
+ npm run test:integration
273
+
274
+ # All tests
275
+ npm run test:all
276
+ ```
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { AnnouncementsServer } from "./server.js";
3
+ async function main() {
4
+ // Check if we should run as HTTP server (for deployment)
5
+ const port = process.env.PORT;
6
+ const server = new AnnouncementsServer();
7
+ if (port) {
8
+ // Running in HTTP mode (deployment)
9
+ await server.start({ httpPort: parseInt(port) });
10
+ // Keep the process running in HTTP mode
11
+ process.on('SIGINT', () => {
12
+ console.log('Shutting down server...');
13
+ process.exit(0);
14
+ });
15
+ // Keep the event loop alive
16
+ setInterval(() => { }, 1000 * 60 * 60); // Heartbeat every hour
17
+ }
18
+ else {
19
+ // Running in MCP mode (stdio)
20
+ await server.start();
21
+ }
22
+ }
23
+ main().catch((error) => {
24
+ // Log errors to stderr and exit
25
+ console.error("Server error:", error);
26
+ process.exit(1);
27
+ });
@@ -0,0 +1,156 @@
1
+ import { BaseAccessServer } from "@access-mcp/shared";
2
+ export declare class AnnouncementsServer extends BaseAccessServer {
3
+ constructor();
4
+ protected getTools(): ({
5
+ name: string;
6
+ description: string;
7
+ inputSchema: {
8
+ type: string;
9
+ properties: {
10
+ tags: {
11
+ type: string;
12
+ description: string;
13
+ required?: undefined;
14
+ };
15
+ ag: {
16
+ type: string;
17
+ description: string;
18
+ required?: undefined;
19
+ };
20
+ affiliation: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ relative_start_date: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ relative_end_date: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ start_date: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ end_date: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ limit: {
41
+ type: string;
42
+ description: string;
43
+ default: number;
44
+ };
45
+ period?: undefined;
46
+ };
47
+ required?: undefined;
48
+ };
49
+ } | {
50
+ name: string;
51
+ description: string;
52
+ inputSchema: {
53
+ type: string;
54
+ properties: {
55
+ tags: {
56
+ type: string;
57
+ description: string;
58
+ required: boolean;
59
+ };
60
+ limit: {
61
+ type: string;
62
+ description: string;
63
+ default: number;
64
+ };
65
+ ag?: undefined;
66
+ affiliation?: undefined;
67
+ relative_start_date?: undefined;
68
+ relative_end_date?: undefined;
69
+ start_date?: undefined;
70
+ end_date?: undefined;
71
+ period?: undefined;
72
+ };
73
+ required: string[];
74
+ };
75
+ } | {
76
+ name: string;
77
+ description: string;
78
+ inputSchema: {
79
+ type: string;
80
+ properties: {
81
+ ag: {
82
+ type: string;
83
+ description: string;
84
+ required: boolean;
85
+ };
86
+ limit: {
87
+ type: string;
88
+ description: string;
89
+ default: number;
90
+ };
91
+ tags?: undefined;
92
+ affiliation?: undefined;
93
+ relative_start_date?: undefined;
94
+ relative_end_date?: undefined;
95
+ start_date?: undefined;
96
+ end_date?: undefined;
97
+ period?: undefined;
98
+ };
99
+ required: string[];
100
+ };
101
+ } | {
102
+ name: string;
103
+ description: string;
104
+ inputSchema: {
105
+ type: string;
106
+ properties: {
107
+ period: {
108
+ type: string;
109
+ description: string;
110
+ default: string;
111
+ };
112
+ limit: {
113
+ type: string;
114
+ description: string;
115
+ default: number;
116
+ };
117
+ tags?: undefined;
118
+ ag?: undefined;
119
+ affiliation?: undefined;
120
+ relative_start_date?: undefined;
121
+ relative_end_date?: undefined;
122
+ start_date?: undefined;
123
+ end_date?: undefined;
124
+ };
125
+ required?: undefined;
126
+ };
127
+ })[];
128
+ protected getResources(): {
129
+ uri: string;
130
+ name: string;
131
+ description: string;
132
+ mimeType: string;
133
+ }[];
134
+ handleToolCall(request: any): Promise<{
135
+ content: {
136
+ type: string;
137
+ text: string;
138
+ }[];
139
+ }>;
140
+ handleResourceRead(request: any): Promise<{
141
+ contents: {
142
+ uri: any;
143
+ mimeType: string;
144
+ text: string;
145
+ }[];
146
+ }>;
147
+ private buildAnnouncementsUrl;
148
+ private fetchAnnouncements;
149
+ private enhanceAnnouncements;
150
+ private getAnnouncements;
151
+ private getAnnouncementsByTags;
152
+ private getAnnouncementsByAffinityGroup;
153
+ private getRecentAnnouncements;
154
+ private getPopularTags;
155
+ private getAffinityGroups;
156
+ }