@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 +276 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +27 -0
- package/dist/server.d.ts +156 -0
- package/dist/server.js +307 -0
- package/package.json +38 -0
- package/src/index.ts +31 -0
- package/src/server.integration.test.ts +220 -0
- package/src/server.test.ts +367 -0
- package/src/server.ts +347 -0
- package/tsconfig.json +12 -0
- package/vitest.integration.config.ts +11 -0
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
|
+
```
|
package/dist/index.d.ts
ADDED
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
|
+
});
|
package/dist/server.d.ts
ADDED
|
@@ -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
|
+
}
|