Commit a0c81de
authored
Add configurable session-segmented payload directory for agent access (#569)
## Implementation Plan: Shared Payload Directory for Large Payloads
- [x] Add configuration support for payload directory
- [x] Add `PayloadDir` field to `GatewayConfig` struct
- [x] Add support in TOML config (`payload_dir`)
- [x] Add support in JSON/stdin config (`payloadDir`)
- [x] Add command-line flag `--payload-dir`
- [x] Add environment variable `MCP_GATEWAY_PAYLOAD_DIR`
- [x] Set default to `/tmp/jq-payloads`
- [x] Update jqschema middleware to use session-based payload
directories
- [x] Modify `savePayload` to accept session ID and base payload
directory
- [x] Create session-specific subdirectories (e.g.,
`/tmp/jq-payloads/{sessionID}/`)
- [x] Update `WrapToolHandler` to pass session ID from context
- [x] Use restrictive permissions (0600 for files, 0700 for directories)
- [x] Update middleware tests
- [x] Fix test signatures to match new WrapToolHandler parameters
- [x] Update test assertions for new directory structure
- [x] Add comprehensive tests for new functionality
- [x] Config parsing tests for payload_dir (TOML)
- [x] Config parsing tests for default payload_dir
- [x] Test session directory creation
- [x] Test payloadDir validation with absolute path requirement
- [x] Update documentation
- [x] Update AGENTS.md with new configuration option
- [x] Document environment variable `MCP_GATEWAY_PAYLOAD_DIR`
- [x] Document command-line flag `--payload-dir`
- [x] Document large payload handling mechanism
- [x] Security improvements
- [x] Use restrictive file permissions (0600) for payload files
- [x] Use restrictive directory permissions (0700) for payload
directories
- [x] Session directory creation
- [x] Gateway checks if session subdirectory exists on session creation
- [x] Creates session directory if it doesn't exist
- [x] Added test for session directory creation
- [x] Schema validation
- [x] Added validation for payloadDir field requiring absolute paths
- [x] Validation matches schema pattern: ^(/|[A-Za-z]:\\)
- [x] Added comprehensive tests for Unix and Windows paths
- [x] Validation conforms to official MCP Gateway schema
- [x] Fix linting issues
- [x] Run gofmt on all modified files
- [x] Run full test suite and verify changes
## Summary
All implementation tasks are complete. The gateway now:
1. Supports configurable payload directories with session-based
segmentation
2. Automatically creates session subdirectories when sessions are
initialized
3. Validates payloadDir as an absolute path per the gateway schema spec
4. Allows agents to mount their own session subdirectory and access
large payloads as regular files
5. All code is properly formatted and passes linting checks
6. payloadDir validation strictly conforms to the official MCP Gateway
schema specification
<!-- START COPILOT CODING AGENT TIPS -->
---
💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.File tree
13 files changed
+580
-42
lines changed- internal
- cmd
- config
- rules
- middleware
- server
13 files changed
+580
-42
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
47 | 48 | | |
48 | 49 | | |
49 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
50 | 56 | | |
51 | 57 | | |
52 | 58 | | |
| |||
357 | 363 | | |
358 | 364 | | |
359 | 365 | | |
| 366 | + | |
360 | 367 | | |
361 | 368 | | |
362 | 369 | | |
363 | 370 | | |
364 | 371 | | |
365 | 372 | | |
366 | 373 | | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
367 | 381 | | |
368 | 382 | | |
369 | 383 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
| 50 | + | |
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
| |||
76 | 78 | | |
77 | 79 | | |
78 | 80 | | |
| 81 | + | |
79 | 82 | | |
80 | 83 | | |
81 | 84 | | |
| |||
99 | 102 | | |
100 | 103 | | |
101 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
102 | 114 | | |
103 | 115 | | |
104 | 116 | | |
| |||
117 | 129 | | |
118 | 130 | | |
119 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
120 | 137 | | |
121 | 138 | | |
122 | 139 | | |
| |||
242 | 259 | | |
243 | 260 | | |
244 | 261 | | |
| 262 | + | |
245 | 263 | | |
246 | 264 | | |
247 | 265 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
37 | 39 | | |
38 | 40 | | |
39 | 41 | | |
| 42 | + | |
40 | 43 | | |
41 | 44 | | |
42 | 45 | | |
| |||
82 | 85 | | |
83 | 86 | | |
84 | 87 | | |
| 88 | + | |
85 | 89 | | |
86 | 90 | | |
87 | 91 | | |
| |||
115 | 119 | | |
116 | 120 | | |
117 | 121 | | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
118 | 125 | | |
119 | 126 | | |
120 | 127 | | |
| |||
185 | 192 | | |
186 | 193 | | |
187 | 194 | | |
| 195 | + | |
188 | 196 | | |
189 | 197 | | |
190 | 198 | | |
| |||
195 | 203 | | |
196 | 204 | | |
197 | 205 | | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
198 | 209 | | |
199 | 210 | | |
200 | 211 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
435 | 435 | | |
436 | 436 | | |
437 | 437 | | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
438 | 471 | | |
439 | 472 | | |
440 | 473 | | |
| |||
917 | 950 | | |
918 | 951 | | |
919 | 952 | | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
920 | 1006 | | |
921 | 1007 | | |
922 | 1008 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
187 | 187 | | |
188 | 188 | | |
189 | 189 | | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
0 commit comments