@crypto512/jicon-mcp 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/.env.example +9 -0
- package/.jicon.json.custom +21 -0
- package/.jicon.json.example +15 -0
- package/.jicon.json.readonly +15 -0
- package/CLAUDE.md +596 -0
- package/CONTRIBUTING.md +371 -0
- package/DEVELOPMENT.md +400 -0
- package/LICENSE +21 -0
- package/README.md +300 -0
- package/TOOL_LIST.md +435 -0
- package/dist/config/constants.d.ts +14 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +18 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/loader.d.ts +35 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +108 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +130 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +32 -0
- package/dist/config/types.js.map +1 -0
- package/dist/confluence/client.d.ts +30 -0
- package/dist/confluence/client.d.ts.map +1 -0
- package/dist/confluence/client.js +176 -0
- package/dist/confluence/client.js.map +1 -0
- package/dist/confluence/defaults.d.ts +23 -0
- package/dist/confluence/defaults.d.ts.map +1 -0
- package/dist/confluence/defaults.js +29 -0
- package/dist/confluence/defaults.js.map +1 -0
- package/dist/confluence/formatters.d.ts +22 -0
- package/dist/confluence/formatters.d.ts.map +1 -0
- package/dist/confluence/formatters.js +125 -0
- package/dist/confluence/formatters.js.map +1 -0
- package/dist/confluence/tools.d.ts +266 -0
- package/dist/confluence/tools.d.ts.map +1 -0
- package/dist/confluence/tools.js +376 -0
- package/dist/confluence/tools.js.map +1 -0
- package/dist/confluence/types.d.ts +122 -0
- package/dist/confluence/types.d.ts.map +1 -0
- package/dist/confluence/types.js +5 -0
- package/dist/confluence/types.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -0
- package/dist/jira/client.d.ts +46 -0
- package/dist/jira/client.d.ts.map +1 -0
- package/dist/jira/client.js +178 -0
- package/dist/jira/client.js.map +1 -0
- package/dist/jira/defaults.d.ts +19 -0
- package/dist/jira/defaults.d.ts.map +1 -0
- package/dist/jira/defaults.js +57 -0
- package/dist/jira/defaults.js.map +1 -0
- package/dist/jira/formatters.d.ts +22 -0
- package/dist/jira/formatters.d.ts.map +1 -0
- package/dist/jira/formatters.js +128 -0
- package/dist/jira/formatters.js.map +1 -0
- package/dist/jira/tools.d.ts +334 -0
- package/dist/jira/tools.d.ts.map +1 -0
- package/dist/jira/tools.js +372 -0
- package/dist/jira/tools.js.map +1 -0
- package/dist/jira/types.d.ts +110 -0
- package/dist/jira/types.d.ts.map +1 -0
- package/dist/jira/types.js +5 -0
- package/dist/jira/types.js.map +1 -0
- package/dist/permissions/filter.d.ts +30 -0
- package/dist/permissions/filter.d.ts.map +1 -0
- package/dist/permissions/filter.js +89 -0
- package/dist/permissions/filter.js.map +1 -0
- package/dist/permissions/tool-registry.d.ts +49 -0
- package/dist/permissions/tool-registry.d.ts.map +1 -0
- package/dist/permissions/tool-registry.js +111 -0
- package/dist/permissions/tool-registry.js.map +1 -0
- package/dist/tempo/client.d.ts +32 -0
- package/dist/tempo/client.d.ts.map +1 -0
- package/dist/tempo/client.js +125 -0
- package/dist/tempo/client.js.map +1 -0
- package/dist/tempo/formatters.d.ts +30 -0
- package/dist/tempo/formatters.d.ts.map +1 -0
- package/dist/tempo/formatters.js +172 -0
- package/dist/tempo/formatters.js.map +1 -0
- package/dist/tempo/tools.d.ts +184 -0
- package/dist/tempo/tools.d.ts.map +1 -0
- package/dist/tempo/tools.js +392 -0
- package/dist/tempo/tools.js.map +1 -0
- package/dist/tempo/types.d.ts +98 -0
- package/dist/tempo/types.d.ts.map +1 -0
- package/dist/tempo/types.js +5 -0
- package/dist/tempo/types.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/http-client.d.ts +22 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +137 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +8 -0
- package/dist/utils/response-formatter.d.ts.map +1 -0
- package/dist/utils/response-formatter.js +38 -0
- package/dist/utils/response-formatter.js.map +1 -0
- package/package.json +50 -0
package/DEVELOPMENT.md
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
# Development Guide - Testing Jicon MCP Server
|
|
2
|
+
|
|
3
|
+
## Testing Your Development Version
|
|
4
|
+
|
|
5
|
+
There are several ways to test the MCP server during development:
|
|
6
|
+
|
|
7
|
+
## Method 1: Claude Desktop with Local Build (Recommended)
|
|
8
|
+
|
|
9
|
+
### Step 1: Build the Project
|
|
10
|
+
```bash
|
|
11
|
+
npm run build
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Step 2: Configure Claude Desktop
|
|
15
|
+
|
|
16
|
+
Edit your Claude Desktop configuration file:
|
|
17
|
+
|
|
18
|
+
**MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
19
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"jicon-dev": {
|
|
25
|
+
"command": "node",
|
|
26
|
+
"args": ["/absolute/path/to/jicon/dist/index.js"],
|
|
27
|
+
"env": {
|
|
28
|
+
"JIRA_URL": "https://jira.example.com",
|
|
29
|
+
"JIRA_USERNAME": "your-email@example.com",
|
|
30
|
+
"JIRA_API_TOKEN": "your-test-token",
|
|
31
|
+
"CONFLUENCE_URL": "https://confluence.example.com",
|
|
32
|
+
"CONFLUENCE_USERNAME": "your-email@example.com",
|
|
33
|
+
"CONFLUENCE_API_TOKEN": "your-test-token"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Or use `.jicon.json` in the project directory:**
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"mcpServers": {
|
|
45
|
+
"jicon-dev": {
|
|
46
|
+
"command": "node",
|
|
47
|
+
"args": ["/absolute/path/to/jicon/dist/index.js"]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Then create `.jicon.json` in your project:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"jira": {
|
|
58
|
+
"url": "https://jira.example.com",
|
|
59
|
+
"username": "your-email@example.com",
|
|
60
|
+
"token": "your-test-token"
|
|
61
|
+
},
|
|
62
|
+
"confluence": {
|
|
63
|
+
"url": "https://confluence.example.com",
|
|
64
|
+
"username": "your-email@example.com",
|
|
65
|
+
"token": "your-test-token"
|
|
66
|
+
},
|
|
67
|
+
"permissions": {
|
|
68
|
+
"mode": "readonly"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 3: Restart Claude Desktop
|
|
74
|
+
|
|
75
|
+
1. Quit Claude Desktop completely
|
|
76
|
+
2. Start Claude Desktop again
|
|
77
|
+
3. The server should appear in the MCP menu (hammer icon)
|
|
78
|
+
|
|
79
|
+
### Step 4: Test in Claude
|
|
80
|
+
|
|
81
|
+
Ask Claude to use the tools:
|
|
82
|
+
```
|
|
83
|
+
Can you search for issues in project TEST using Jira?
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Method 2: MCP Inspector (Best for Debugging)
|
|
89
|
+
|
|
90
|
+
The MCP Inspector is a tool from Anthropic for testing MCP servers.
|
|
91
|
+
|
|
92
|
+
### Install MCP Inspector
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx @modelcontextprotocol/inspector node dist/index.js
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This opens a web interface where you can:
|
|
99
|
+
- See all available tools
|
|
100
|
+
- Test tool execution
|
|
101
|
+
- Inspect requests/responses
|
|
102
|
+
- Debug errors
|
|
103
|
+
|
|
104
|
+
### With Configuration File
|
|
105
|
+
|
|
106
|
+
Create `.jicon.json` in the project root first, then:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
npx @modelcontextprotocol/inspector node dist/index.js
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The inspector will read your config automatically.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Method 3: Manual Testing with stdio
|
|
117
|
+
|
|
118
|
+
### Test the Server Directly
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Build first
|
|
122
|
+
npm run build
|
|
123
|
+
|
|
124
|
+
# Run the server
|
|
125
|
+
node dist/index.js
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
You should see:
|
|
129
|
+
```
|
|
130
|
+
✓ Using environment variables (or config file info)
|
|
131
|
+
✓ Jira configured: https://jira.example.com
|
|
132
|
+
✓ Confluence configured: https://confluence.example.com
|
|
133
|
+
✓ Permission mode: full
|
|
134
|
+
✓ Allowed tools: 28/28
|
|
135
|
+
Jicon MCP Server running on stdio
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Send Test JSON-RPC Request
|
|
139
|
+
|
|
140
|
+
The server communicates via JSON-RPC over stdio. You can test manually:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Method 4: npm link for Global Testing
|
|
149
|
+
|
|
150
|
+
Make your dev version available globally:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# In the jicon directory
|
|
154
|
+
npm link
|
|
155
|
+
|
|
156
|
+
# Now you can use it anywhere
|
|
157
|
+
jicon-mcp
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Then in Claude Desktop config:
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"mcpServers": {
|
|
164
|
+
"jicon-dev": {
|
|
165
|
+
"command": "jicon-mcp"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Testing Different Configurations
|
|
174
|
+
|
|
175
|
+
### Test Read-Only Mode
|
|
176
|
+
|
|
177
|
+
Create `.jicon.json`:
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"jira": { "url": "...", "username": "...", "token": "..." },
|
|
181
|
+
"confluence": { "url": "...", "username": "...", "token": "..." },
|
|
182
|
+
"permissions": {
|
|
183
|
+
"mode": "readonly"
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Ask Claude to try creating an issue - it should be denied:
|
|
189
|
+
```
|
|
190
|
+
Create a Jira issue in project TEST
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Expected: Error message about permission denied.
|
|
194
|
+
|
|
195
|
+
### Test Virtual Actions
|
|
196
|
+
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"permissions": {
|
|
200
|
+
"mode": "custom",
|
|
201
|
+
"whitelist": ["jira_read", "confluence_read"]
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Test that only read actions work.
|
|
207
|
+
|
|
208
|
+
### Test Whitelist
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"permissions": {
|
|
213
|
+
"mode": "custom",
|
|
214
|
+
"whitelist": ["jira_search_issues", "jira_get_issue"]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Only those 2 tools should be available.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Development Workflow
|
|
224
|
+
|
|
225
|
+
### 1. Make Changes to Code
|
|
226
|
+
|
|
227
|
+
Edit files in `src/`:
|
|
228
|
+
```bash
|
|
229
|
+
vim src/jira/tools.ts
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 2. Rebuild
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
npm run build
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Or use watch mode:
|
|
239
|
+
```bash
|
|
240
|
+
npm run watch
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 3. Restart Claude Desktop
|
|
244
|
+
|
|
245
|
+
- Quit Claude Desktop
|
|
246
|
+
- Start it again
|
|
247
|
+
- Test your changes
|
|
248
|
+
|
|
249
|
+
### 4. Check Logs
|
|
250
|
+
|
|
251
|
+
**MacOS Logs:**
|
|
252
|
+
```bash
|
|
253
|
+
tail -f ~/Library/Logs/Claude/mcp*.log
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Windows Logs:**
|
|
257
|
+
```
|
|
258
|
+
%APPDATA%\Claude\logs\
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Look for errors or debug output from your server.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Debugging Tips
|
|
266
|
+
|
|
267
|
+
### Enable Verbose Logging
|
|
268
|
+
|
|
269
|
+
Add console.error statements (they go to stderr, not stdout):
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
console.error("DEBUG: Tool called with args:", args);
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Test Individual Components
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# Test configuration loading
|
|
279
|
+
node -e "const {ConfigLoader} = require('./dist/config/loader.js'); console.log(ConfigLoader.load())"
|
|
280
|
+
|
|
281
|
+
# Test permission filter
|
|
282
|
+
node -e "const {PermissionFilter} = require('./dist/permissions/filter.js'); const f = new PermissionFilter({mode:'readonly',whitelist:[],blacklist:[]}); console.log(f.isToolAllowed('jira_search_issues'))"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Run Unit Tests
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
npm test
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Test Specific Test File
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
node --test tests/permissions/filter.test.ts
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Common Issues
|
|
300
|
+
|
|
301
|
+
### Issue: "Command not found"
|
|
302
|
+
|
|
303
|
+
**Solution:** Use absolute path in Claude Desktop config:
|
|
304
|
+
```json
|
|
305
|
+
"args": ["/Users/yourname/projects/jicon/dist/index.js"]
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Issue: "No services configured"
|
|
309
|
+
|
|
310
|
+
**Solution:** Check your `.jicon.json` or environment variables are set correctly.
|
|
311
|
+
|
|
312
|
+
### Issue: Server not appearing in Claude Desktop
|
|
313
|
+
|
|
314
|
+
**Solution:**
|
|
315
|
+
1. Check config file syntax (valid JSON)
|
|
316
|
+
2. Restart Claude Desktop completely
|
|
317
|
+
3. Check logs for errors
|
|
318
|
+
4. Verify the `command` path is correct
|
|
319
|
+
|
|
320
|
+
### Issue: Permission denied errors
|
|
321
|
+
|
|
322
|
+
**Solution:** Check your `permissions` configuration in `.jicon.json`.
|
|
323
|
+
|
|
324
|
+
### Issue: Changes not taking effect
|
|
325
|
+
|
|
326
|
+
**Solution:**
|
|
327
|
+
1. Run `npm run build` after code changes
|
|
328
|
+
2. Completely quit and restart Claude Desktop
|
|
329
|
+
3. Clear Claude Desktop cache if needed
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Testing Checklist
|
|
334
|
+
|
|
335
|
+
Before committing changes:
|
|
336
|
+
|
|
337
|
+
- [ ] `npm run build` succeeds
|
|
338
|
+
- [ ] `npm test` passes
|
|
339
|
+
- [ ] Server starts without errors
|
|
340
|
+
- [ ] Can list tools via MCP Inspector
|
|
341
|
+
- [ ] Can execute tools in Claude Desktop
|
|
342
|
+
- [ ] Permission system works as expected
|
|
343
|
+
- [ ] Error messages are clear and helpful
|
|
344
|
+
- [ ] Config hierarchy works (project > home > env)
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Advanced: Testing with Multiple Configurations
|
|
349
|
+
|
|
350
|
+
Create a test script to quickly switch configs:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
#!/bin/bash
|
|
354
|
+
# test-config.sh
|
|
355
|
+
|
|
356
|
+
case $1 in
|
|
357
|
+
"full")
|
|
358
|
+
cp .jicon.json.example .jicon.json
|
|
359
|
+
;;
|
|
360
|
+
"readonly")
|
|
361
|
+
cp .jicon.json.readonly .jicon.json
|
|
362
|
+
;;
|
|
363
|
+
"custom")
|
|
364
|
+
cp .jicon.json.custom .jicon.json
|
|
365
|
+
;;
|
|
366
|
+
*)
|
|
367
|
+
echo "Usage: ./test-config.sh [full|readonly|custom]"
|
|
368
|
+
exit 1
|
|
369
|
+
;;
|
|
370
|
+
esac
|
|
371
|
+
|
|
372
|
+
echo "Switched to $1 mode. Restart Claude Desktop to apply."
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Testing with CI/CD
|
|
378
|
+
|
|
379
|
+
For automated testing, you can use the MCP test utilities:
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# Run integration tests (coming soon)
|
|
383
|
+
npm run test:integration
|
|
384
|
+
|
|
385
|
+
# Test against mock Jira/Confluence servers
|
|
386
|
+
npm run test:e2e
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## Need Help?
|
|
392
|
+
|
|
393
|
+
- Check [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines
|
|
394
|
+
- See [README.md](README.md) for configuration examples
|
|
395
|
+
- Open an issue on GitHub for bugs
|
|
396
|
+
- Use GitHub Discussions for questions
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
**Happy Testing! 🚀**
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Jicon Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Jicon - Jira & Confluence MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/%40crypto512%2Fjicon-mcp)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> A comprehensive Model Context Protocol (MCP) server for seamless integration with Atlassian Jira and Confluence.
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Run with npx (no installation required)
|
|
12
|
+
npx @crypto512/jicon-mcp
|
|
13
|
+
|
|
14
|
+
# Or install globally
|
|
15
|
+
npm install -g @crypto512/jicon-mcp
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## What is Jicon?
|
|
19
|
+
|
|
20
|
+
Jicon is an MCP server that enables AI assistants like Claude to interact with your Jira and Confluence instances. It provides 28 powerful tools for:
|
|
21
|
+
|
|
22
|
+
- 🎫 **Jira**: Issue management, searching, project operations, Agile boards, sprints
|
|
23
|
+
- 📄 **Confluence**: Page management, content search, spaces, attachments, comments
|
|
24
|
+
|
|
25
|
+
## Features at a Glance
|
|
26
|
+
|
|
27
|
+
### Jira (15 Tools)
|
|
28
|
+
- Search issues with JQL
|
|
29
|
+
- Create, update, and transition issues
|
|
30
|
+
- Manage comments and links
|
|
31
|
+
- Access boards and sprints
|
|
32
|
+
- View projects and metadata
|
|
33
|
+
|
|
34
|
+
### Confluence (13 Tools)
|
|
35
|
+
- Search content with CQL
|
|
36
|
+
- Create and update pages
|
|
37
|
+
- Navigate page hierarchies
|
|
38
|
+
- Manage attachments
|
|
39
|
+
- Add and view comments
|
|
40
|
+
|
|
41
|
+
## Configuration
|
|
42
|
+
|
|
43
|
+
### Configuration with `.jicon.json` (Recommended)
|
|
44
|
+
|
|
45
|
+
Jicon supports a flexible configuration hierarchy with permission control:
|
|
46
|
+
|
|
47
|
+
**Configuration Priority:**
|
|
48
|
+
1. `.jicon.json` (project root) - **Highest priority**
|
|
49
|
+
2. `$HOME/.config/jicon/jicon.json` (user config) - Medium priority
|
|
50
|
+
3. Environment variables - Lowest priority (legacy)
|
|
51
|
+
|
|
52
|
+
**Create `.jicon.json` in your project root:**
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"jira": {
|
|
57
|
+
"url": "https://jira.example.com",
|
|
58
|
+
"username": "your-email@example.com",
|
|
59
|
+
"token": "your-api-token"
|
|
60
|
+
},
|
|
61
|
+
"confluence": {
|
|
62
|
+
"url": "https://confluence.example.com",
|
|
63
|
+
"username": "your-email@example.com",
|
|
64
|
+
"token": "your-api-token"
|
|
65
|
+
},
|
|
66
|
+
"permissions": {
|
|
67
|
+
"mode": "full"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**⚠️ Important:** Add `.jicon.json` to your `.gitignore` to avoid committing credentials!
|
|
73
|
+
|
|
74
|
+
### Permission Modes
|
|
75
|
+
|
|
76
|
+
Control which tools are allowed to execute:
|
|
77
|
+
|
|
78
|
+
#### 1. **Full Access** (default)
|
|
79
|
+
```json
|
|
80
|
+
{ "permissions": { "mode": "full" } }
|
|
81
|
+
```
|
|
82
|
+
All 28 tools are available.
|
|
83
|
+
|
|
84
|
+
#### 2. **Read-Only Mode**
|
|
85
|
+
```json
|
|
86
|
+
{ "permissions": { "mode": "readonly" } }
|
|
87
|
+
```
|
|
88
|
+
Only read operations (18 tools: 10 Jira + 8 Confluence).
|
|
89
|
+
|
|
90
|
+
#### 3. **Custom Mode** with Virtual Actions
|
|
91
|
+
|
|
92
|
+
Simplify configuration with **virtual actions** that group related tools:
|
|
93
|
+
|
|
94
|
+
**Virtual Actions Available:**
|
|
95
|
+
- `jira_read` - All 10 Jira read tools
|
|
96
|
+
- `jira_write` - All 5 Jira write tools
|
|
97
|
+
- `jira_all` - All 15 Jira tools
|
|
98
|
+
- `confluence_read` - All 8 Confluence read tools
|
|
99
|
+
- `confluence_write` - All 5 Confluence write tools
|
|
100
|
+
- `confluence_all` - All 13 Confluence tools
|
|
101
|
+
|
|
102
|
+
**Example: Read-only access to both services**
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"permissions": {
|
|
106
|
+
"mode": "custom",
|
|
107
|
+
"whitelist": ["jira_read", "confluence_read"]
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Example: Full Jira + Confluence read-only**
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"permissions": {
|
|
116
|
+
"mode": "custom",
|
|
117
|
+
"whitelist": ["jira_all", "confluence_read"]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Example: Specific tools only**
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"permissions": {
|
|
126
|
+
"mode": "custom",
|
|
127
|
+
"whitelist": [
|
|
128
|
+
"jira_search_issues",
|
|
129
|
+
"jira_get_issue",
|
|
130
|
+
"jira_create_issue",
|
|
131
|
+
"confluence_get_page"
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Example: Blacklist dangerous operations**
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"permissions": {
|
|
141
|
+
"mode": "custom",
|
|
142
|
+
"blacklist": ["confluence_delete_page"]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
See [`.jicon.json.example`](.jicon.json.example), [`.jicon.json.readonly`](.jicon.json.readonly), and [`.jicon.json.custom`](.jicon.json.custom) for more examples.
|
|
148
|
+
|
|
149
|
+
### Environment Variables (Legacy)
|
|
150
|
+
|
|
151
|
+
For Claude Desktop, add to config file:
|
|
152
|
+
|
|
153
|
+
**MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"mcpServers": {
|
|
158
|
+
"jicon": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "@crypto512/jicon-mcp"],
|
|
161
|
+
"env": {
|
|
162
|
+
"JIRA_URL": "https://jira.example.com",
|
|
163
|
+
"JIRA_USERNAME": "your-email@example.com",
|
|
164
|
+
"JIRA_API_TOKEN": "your-api-token",
|
|
165
|
+
"CONFLUENCE_URL": "https://confluence.example.com",
|
|
166
|
+
"CONFLUENCE_USERNAME": "your-email@example.com",
|
|
167
|
+
"CONFLUENCE_API_TOKEN": "your-api-token"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Example Usage
|
|
175
|
+
|
|
176
|
+
Once configured, you can ask Claude to:
|
|
177
|
+
|
|
178
|
+
- *"Find all high-priority bugs assigned to me in the PROJ project"*
|
|
179
|
+
- *"Create a new task for implementing the login feature"*
|
|
180
|
+
- *"Show me the current sprint's progress"*
|
|
181
|
+
- *"Update the API documentation page in Confluence"*
|
|
182
|
+
- *"Search for pages about authentication in the DOCS space"*
|
|
183
|
+
|
|
184
|
+
## Documentation
|
|
185
|
+
|
|
186
|
+
- **[CLAUDE.md](CLAUDE.md)** - Complete functional specification
|
|
187
|
+
- **[TOOL_LIST.md](TOOL_LIST.md)** - Comprehensive tool reference with examples
|
|
188
|
+
- **[API Documentation](docs/api.md)** - Detailed API documentation (coming soon)
|
|
189
|
+
|
|
190
|
+
## Tool Categories
|
|
191
|
+
|
|
192
|
+
### Jira Tools
|
|
193
|
+
| Category | Tools |
|
|
194
|
+
|----------|-------|
|
|
195
|
+
| **Search & Retrieval** | `jira_search_issues`, `jira_get_issue`, `jira_get_issue_comments` |
|
|
196
|
+
| **Issue Management** | `jira_create_issue`, `jira_update_issue`, `jira_transition_issue` |
|
|
197
|
+
| **Collaboration** | `jira_add_comment`, `jira_link_issues`, `jira_get_issue_watchers` |
|
|
198
|
+
| **Projects** | `jira_list_projects`, `jira_get_project` |
|
|
199
|
+
| **Agile** | `jira_get_board`, `jira_get_sprints`, `jira_get_sprint_issues` |
|
|
200
|
+
| **Workflow** | `jira_get_transitions` |
|
|
201
|
+
|
|
202
|
+
### Confluence Tools
|
|
203
|
+
| Category | Tools |
|
|
204
|
+
|----------|-------|
|
|
205
|
+
| **Search & Retrieval** | `confluence_search_content`, `confluence_get_page`, `confluence_get_page_by_title` |
|
|
206
|
+
| **Page Management** | `confluence_create_page`, `confluence_update_page`, `confluence_delete_page` |
|
|
207
|
+
| **Spaces** | `confluence_list_spaces`, `confluence_get_space` |
|
|
208
|
+
| **Navigation** | `confluence_get_page_children` |
|
|
209
|
+
| **Collaboration** | `confluence_add_comment`, `confluence_get_comments` |
|
|
210
|
+
| **Attachments** | `confluence_upload_attachment`, `confluence_list_attachments` |
|
|
211
|
+
|
|
212
|
+
## Requirements
|
|
213
|
+
|
|
214
|
+
- Node.js 18 or higher
|
|
215
|
+
- Jira Server/Data Center or Jira Cloud instance
|
|
216
|
+
- Confluence Server/Data Center or Confluence Cloud instance
|
|
217
|
+
- Valid API tokens or Personal Access Tokens
|
|
218
|
+
|
|
219
|
+
## Authentication
|
|
220
|
+
|
|
221
|
+
### Jira/Confluence Cloud
|
|
222
|
+
Generate an API token from your Atlassian account:
|
|
223
|
+
1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
|
|
224
|
+
2. Create a new API token
|
|
225
|
+
3. Use your email as username and the token as password
|
|
226
|
+
|
|
227
|
+
### Jira/Confluence Data Center
|
|
228
|
+
Generate a Personal Access Token (PAT):
|
|
229
|
+
1. Go to your profile settings
|
|
230
|
+
2. Navigate to "Personal Access Tokens"
|
|
231
|
+
3. Create a new token with required permissions
|
|
232
|
+
|
|
233
|
+
## Security Best Practices
|
|
234
|
+
|
|
235
|
+
- ✅ Store credentials in environment variables
|
|
236
|
+
- ✅ Use API tokens with minimal required permissions
|
|
237
|
+
- ✅ Regularly rotate API tokens
|
|
238
|
+
- ✅ Never commit credentials to version control
|
|
239
|
+
- ✅ Use read-only tokens for search/read operations
|
|
240
|
+
|
|
241
|
+
## Development Status
|
|
242
|
+
|
|
243
|
+
- ✅ **Specification Complete** - Functional spec and tool list defined
|
|
244
|
+
- ✅ **Implementation Complete** - All 28 tools implemented
|
|
245
|
+
- ✅ **Testing** - 86 tests passing
|
|
246
|
+
- ✅ **Configuration System** - Flexible .jicon.json with permissions
|
|
247
|
+
- 📦 **Publishing** - Ready for npm publish
|
|
248
|
+
|
|
249
|
+
## Roadmap
|
|
250
|
+
|
|
251
|
+
### Phase 1: Core Implementation ✅ **COMPLETED**
|
|
252
|
+
- ✅ Project setup and structure
|
|
253
|
+
- ✅ Jira API client implementation (310 lines, 15 tools)
|
|
254
|
+
- ✅ Confluence API client implementation (281 lines, 13 tools)
|
|
255
|
+
- ✅ MCP server implementation (179 lines)
|
|
256
|
+
- ✅ Basic testing (86 tests, 100% pass rate)
|
|
257
|
+
- ✅ Configuration system (.jicon.json with hierarchy)
|
|
258
|
+
- ✅ Permission system (full, readonly, custom modes)
|
|
259
|
+
- ✅ Virtual actions (jira_read, jira_all, confluence_read, etc.)
|
|
260
|
+
- ✅ Development and contributing guides
|
|
261
|
+
|
|
262
|
+
### Phase 2: Enhancement (In Progress)
|
|
263
|
+
- ✅ Advanced error handling (implemented)
|
|
264
|
+
- [ ] Rate limiting and caching
|
|
265
|
+
- [ ] Integration tests with mock servers
|
|
266
|
+
- ✅ Documentation examples (DEVELOPMENT.md added)
|
|
267
|
+
- [ ] CI/CD pipeline
|
|
268
|
+
- [ ] npm package publishing
|
|
269
|
+
|
|
270
|
+
### Phase 3: Advanced Features (Planned)
|
|
271
|
+
- [ ] Bulk operations
|
|
272
|
+
- [ ] Custom field templates
|
|
273
|
+
- [ ] Webhook support
|
|
274
|
+
- [ ] Multi-instance support
|
|
275
|
+
- [ ] CLI tool for configuration testing
|
|
276
|
+
- [ ] Performance optimizations
|
|
277
|
+
|
|
278
|
+
## Contributing
|
|
279
|
+
|
|
280
|
+
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
|
|
281
|
+
|
|
282
|
+
## License
|
|
283
|
+
|
|
284
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
285
|
+
|
|
286
|
+
## Support
|
|
287
|
+
|
|
288
|
+
- 🐛 **Issues**: [GitHub Issues](https://github.com/crypto512/jicon/issues)
|
|
289
|
+
- 💬 **Discussions**: [GitHub Discussions](https://github.com/crypto512/jicon/discussions)
|
|
290
|
+
- 📖 **Documentation**: [GitHub Repository](https://github.com/crypto512/jicon)
|
|
291
|
+
|
|
292
|
+
## Acknowledgments
|
|
293
|
+
|
|
294
|
+
- Built on [Model Context Protocol](https://modelcontextprotocol.io) by Anthropic
|
|
295
|
+
- Powered by Atlassian APIs
|
|
296
|
+
- Inspired by the community's need for better Jira/Confluence integration
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
**Made with ❤️ for developers who work with Jira and Confluence**
|