mcp-quickbase 2.0.3 → 2.0.5

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.
@@ -0,0 +1,37 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ steps:
27
+ - name: Checkout repository
28
+ uses: actions/checkout@v4
29
+ with:
30
+ fetch-depth: 1
31
+
32
+ - name: Run Claude Code
33
+ id: claude
34
+ uses: anthropics/claude-code-action@beta
35
+ with:
36
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
37
+
package/.mcp.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "mcpServers": {
3
+ "github": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "@modelcontextprotocol/server-github"
8
+ ],
9
+ "env": {
10
+ "GITHUB_TOKEN": "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"
11
+ }
12
+ },
13
+ "memory": {
14
+ "command": "docker",
15
+ "args": [
16
+ "run",
17
+ "-i",
18
+ "-v",
19
+ "claude-memory:/app/dist",
20
+ "--rm",
21
+ "mcp/memory"
22
+ ]
23
+ },
24
+ "sequentialthinking": {
25
+ "command": "docker",
26
+ "args": [
27
+ "run",
28
+ "--rm",
29
+ "-i",
30
+ "mcp/sequentialthinking"
31
+ ]
32
+ },
33
+ "context7": {
34
+ "command": "npx",
35
+ "args": [
36
+ "-y",
37
+ "@upstash/context7-mcp"
38
+ ]
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,84 @@
1
+ # Security Hardening and Consistency Improvements Summary
2
+
3
+ ## Overview
4
+ This document summarizes the security hardening and consistency improvements made to the MCP-Quickbase codebase.
5
+
6
+ ## Critical Security Improvements
7
+
8
+ ### 1. File Operations Security (HIGH PRIORITY)
9
+ - **Added path traversal protection** to prevent access outside working directory
10
+ - **Implemented file size limits** (10MB) for read/write operations
11
+ - **Added path sanitization** with validation before any filesystem access
12
+ - **Configurable working directory** via `QUICKBASE_WORKING_DIR` environment variable
13
+ - **Security logging** for attempted violations
14
+
15
+ ### 2. Configuration Validation
16
+ - **Added bounds checking** for all numeric configuration values:
17
+ - Rate limit: 1-100 requests/second
18
+ - Cache TTL: 0-86400 seconds (24 hours max)
19
+ - Max retries: 0-10
20
+ - Retry delay: 100ms-60s
21
+ - Request timeout: 1s-5 minutes
22
+ - **Improved realm hostname redaction** in logs to preserve domain structure
23
+
24
+ ## Consistency Improvements
25
+
26
+ ### 1. Documentation
27
+ - **Fixed package naming inconsistency** (was `quickbase-mcp-connector`, now correctly `mcp-quickbase`)
28
+ - **Added community project disclaimer** with appropriate language
29
+ - **Updated all installation instructions** to use correct package name
30
+
31
+ ### 2. Code Quality
32
+ - **TypeScript strict mode** is properly enabled
33
+ - **Consistent error handling** across all tools
34
+ - **Proper logging** with sensitive data redaction
35
+ - **Consistent file naming** (kebab-case) across the project
36
+
37
+ ## Areas of Excellence
38
+
39
+ ### 1. Defensive Programming
40
+ - **Circuit breakers** in pagination logic (query_records)
41
+ - **Timeout protection** (30s) for long-running operations
42
+ - **Rate limiting** with thread-safe implementation
43
+ - **Exponential backoff with jitter** in retry logic
44
+
45
+ ### 2. Error Handling
46
+ - **Comprehensive API response validation**
47
+ - **Proper error propagation** from tools to MCP
48
+ - **Graceful shutdown handlers** for SIGTERM/SIGINT
49
+ - **Cache cleanup** on shutdown
50
+
51
+ ### 3. Security Features
52
+ - **Sensitive data redaction** in logs (tokens, auth headers)
53
+ - **Input validation** using Zod schemas
54
+ - **Environment variable validation** at startup
55
+ - **Memory-efficient file streaming** for large files using streaming APIs (e.g., Node.js `fs.createReadStream`) to handle large files without excessive memory usage
56
+
57
+ ## Remaining Improvements (Lower Priority)
58
+
59
+ ### 1. Type Safety
60
+ - 72 ESLint warnings for `any` types in API response handling
61
+ - Could be improved but not critical for security
62
+
63
+ ### 2. Test Coverage
64
+ - Current coverage: 42.57%
65
+ - File operations have low coverage (20%)
66
+ - Many tools lack dedicated test files
67
+
68
+ ### 3. Code Duplication
69
+ - File upload tool has duplicate path validation
70
+ - Could be refactored to use centralized file utilities
71
+
72
+ ### 4. Minor Enhancements
73
+ - Could add circuit breaker pattern to retry logic
74
+ - User token could be stored more securely (currently in config object)
75
+
76
+ ## Recommendations
77
+
78
+ 1. **Immediate Priority**: The file security improvements are critical and have been implemented
79
+ 2. **Medium Priority**: Improve test coverage, especially for file operations
80
+ 3. **Low Priority**: Address TypeScript `any` warnings for better type safety
81
+ 4. **Future Enhancement**: Consider adding rate limiting per API endpoint
82
+
83
+ ## Testing
84
+ All changes have been tested and pass the existing test suite. No regressions were introduced.
package/README.md CHANGED
@@ -1,38 +1,24 @@
1
1
  # Quickbase MCP Server
2
2
 
3
- A TypeScript-based Model Context Protocol (MCP) connector for Quickbase, designed for seamless integration with Claude and other AI assistants.
3
+ A TypeScript-based Model Context Protocol (MCP) server for Quickbase, designed for seamless integration with Claude Desktop and other AI assistants.
4
4
 
5
- ## 🚀 Quick Start
5
+ > **📋 Community Project Notice**
6
+ > This is a community-developed integration that is not an official Quickbase product. While it uses Quickbase's public APIs, it is not officially supported by Quickbase, Inc. This project is provided "as is" and maintained by the community. For official Quickbase products and support, please visit [quickbase.com](https://www.quickbase.com).
6
7
 
7
- ### Installation via NPM (Recommended)
8
+ ## 🚀 Quick Start for Claude Desktop
8
9
 
9
- ```bash
10
- # Use directly with npx (no installation needed)
11
- npx -y mcp-quickbase
12
-
13
- # Or install globally
14
- npm install -g mcp-quickbase
15
- ```
16
-
17
- ### Installation from Source
10
+ ### One-Line Setup Check
18
11
 
19
12
  ```bash
20
- # Clone the repository
21
- git clone https://github.com/danielbushman/MCP-Quickbase.git
22
- cd MCP-Quickbase
23
-
24
- # Install dependencies
25
- npm install
26
-
27
- # Build the project
28
- npm run build
13
+ curl -fsSL https://raw.githubusercontent.com/danielbushman/MCP-Quickbase/main/check_dependencies.sh | bash
29
14
  ```
30
15
 
31
- ### Configuration
16
+ ### Configure Claude Desktop
32
17
 
33
- #### For NPM Users
18
+ Add this to your Claude Desktop configuration file:
34
19
 
35
- Configure directly in Claude Desktop:
20
+ **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
21
+ **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
36
22
 
37
23
  ```json
38
24
  {
@@ -43,29 +29,44 @@ Configure directly in Claude Desktop:
43
29
  "env": {
44
30
  "QUICKBASE_REALM_HOST": "your-realm.quickbase.com",
45
31
  "QUICKBASE_USER_TOKEN": "your-user-token",
46
- "QUICKBASE_APP_ID": "your-app-id",
47
- "QUICKBASE_CACHE_ENABLED": "true",
48
- "QUICKBASE_CACHE_TTL": "3600"
32
+ "QUICKBASE_APP_ID": "your-app-id"
49
33
  }
50
34
  }
51
35
  }
52
36
  }
53
37
  ```
54
38
 
55
- #### For Local Development
39
+ **That's it!** Restart Claude Desktop and you can start using Quickbase tools.
56
40
 
57
- Create a `.env` file in the root directory:
41
+ ---
42
+
43
+ ## 📦 Installation Options
44
+
45
+ ### Option 1: NPM (Recommended)
46
+
47
+ ```bash
48
+ # Use directly with npx (no installation needed)
49
+ npx -y mcp-quickbase
50
+
51
+ # Or install globally
52
+ npm install -g mcp-quickbase
53
+ ```
54
+
55
+ ### Option 2: From Source
56
+
57
+ ```bash
58
+ # Clone the repository
59
+ git clone https://github.com/danielbushman/MCP-Quickbase.git
60
+ cd MCP-Quickbase
61
+
62
+ # Install dependencies
63
+ npm install
58
64
 
59
- ```env
60
- QUICKBASE_REALM_HOST=your-realm.quickbase.com
61
- QUICKBASE_USER_TOKEN=your-user-token
62
- QUICKBASE_APP_ID=your-app-id
63
- QUICKBASE_CACHE_ENABLED=true
64
- QUICKBASE_CACHE_TTL=3600
65
- DEBUG=false
65
+ # Build the project
66
+ npm run build
66
67
  ```
67
68
 
68
- Then configure Claude Desktop:
69
+ For source installation, use this Claude Desktop configuration:
69
70
 
70
71
  ```json
71
72
  {
@@ -83,11 +84,30 @@ Then configure Claude Desktop:
83
84
  }
84
85
  ```
85
86
 
86
- 2. **Start using tools**: The connector provides 18 comprehensive tools for Quickbase operations.
87
+ ## 🔧 Configuration
88
+
89
+ The server can start without environment variables configured, but tools will not be functional until proper configuration is provided. Use the `check_configuration` tool to verify your setup.
90
+
91
+ ### Required Environment Variables
92
+
93
+ - **`QUICKBASE_REALM_HOST`** - Your Quickbase realm (e.g., `company.quickbase.com`)
94
+ - **`QUICKBASE_USER_TOKEN`** - Your Quickbase API token ([Get one here](https://help.quickbase.com/en/articles/8672050))
95
+
96
+ ### Optional Environment Variables
97
+
98
+ - **`QUICKBASE_APP_ID`** - Default application ID
99
+
100
+ ### Optional Settings
101
+
102
+ - **`QUICKBASE_CACHE_ENABLED`** - Enable caching (`true`/`false`, default: `true`)
103
+ - **`QUICKBASE_CACHE_TTL`** - Cache duration in seconds (default: `3600`)
104
+ - **`DEBUG`** - Enable debug logging (`true`/`false`, default: `false`)
105
+ - **`LOG_LEVEL`** - Logging level (`DEBUG`/`INFO`/`WARN`/`ERROR`, default: `INFO`)
87
106
 
88
107
  ## 🛠️ Available Tools
89
108
 
90
109
  ### Connection & Configuration
110
+ - **`check_configuration`** - Check if Quickbase configuration is properly set up
91
111
  - **`test_connection`** - Test connection to Quickbase
92
112
  - **`configure_cache`** - Configure caching behavior
93
113
 
@@ -98,204 +118,66 @@ Then configure Claude Desktop:
98
118
 
99
119
  ### Table Operations
100
120
  - **`create_table`** - Create new tables
101
- - **`update_table`** - Update existing tables
102
- - **`get_table_fields`** - Retrieve table field definitions
121
+ - **`update_table`** - Update table properties
122
+ - **`get_table_fields`** - Get field information for a table
103
123
 
104
124
  ### Field Management
105
125
  - **`create_field`** - Create new fields in tables
106
- - **`update_field`** - Update existing field properties
126
+ - **`update_field`** - Update field properties
107
127
 
108
128
  ### Record Operations
109
- - **`query_records`** - Query records with advanced filtering
129
+ - **`query_records`** - Query records with filtering and sorting
110
130
  - **`create_record`** - Create single records
111
131
  - **`update_record`** - Update existing records
112
- - **`bulk_create_records`** - Create multiple records efficiently
113
- - **`bulk_update_records`** - Update multiple records efficiently
114
-
115
- ### File Handling
116
- - **`upload_file`** - Upload files to record fields
117
- - **`download_file`** - Download files from record fields
118
-
119
- ### Reports
120
- - **`run_report`** - Execute Quickbase reports with filters
121
-
122
- ## 🏗️ Architecture
123
-
124
- ### TypeScript-First Design
125
- - **100% TypeScript** for type safety and developer experience
126
- - **Comprehensive type definitions** for all Quickbase API interactions
127
- - **Modern async/await** patterns throughout
128
-
129
- ### Performance Features
130
- - **Intelligent caching** with configurable TTL
131
- - **Automatic retry logic** for transient failures
132
- - **Bulk operations** for high-performance data manipulation
133
- - **Pagination support** for large datasets
134
-
135
- ### Error Handling
136
- - **Structured error responses** with detailed context
137
- - **Graceful degradation** for API failures
138
- - **Comprehensive logging** for debugging
139
-
140
- ## 📚 Examples
141
-
142
- ### Basic Record Operations
143
-
144
- ```typescript
145
- // Query records
146
- const records = await queryRecords({
147
- table_id: "bqrxzt5wq",
148
- where: "{6.CT.'Project'}",
149
- select: ["1", "6", "7", "8"]
150
- });
151
-
152
- // Create a record
153
- const newRecord = await createRecord({
154
- table_id: "bqrxzt5wq",
155
- data: {
156
- "6": "New Project",
157
- "7": "Project description",
158
- "8": "High"
159
- }
160
- });
161
-
162
- // Update multiple records
163
- const updates = await bulkUpdateRecords({
164
- table_id: "bqrxzt5wq",
165
- records: [
166
- { "3": "123", "8": "Critical" },
167
- { "3": "124", "8": "Low" }
168
- ]
169
- });
170
- ```
132
+ - **`bulk_create_records`** - Create multiple records
133
+ - **`bulk_update_records`** - Update multiple records
171
134
 
172
135
  ### File Operations
136
+ - **`upload_file`** - Upload files to file attachment fields
137
+ - **`download_file`** - Download files from records
173
138
 
174
- ```typescript
175
- // Upload a file
176
- const upload = await uploadFile({
177
- table_id: "bqrxzt5wq",
178
- record_id: "123",
179
- field_id: "9",
180
- file_path: "/path/to/document.pdf"
181
- });
182
-
183
- // Download a file
184
- const download = await downloadFile({
185
- table_id: "bqrxzt5wq",
186
- record_id: "123",
187
- field_id: "9",
188
- output_path: "/downloads/document.pdf"
189
- });
190
- ```
191
-
192
- ### Advanced Queries with Pagination
193
-
194
- ```typescript
195
- // Paginated query for large datasets
196
- const largeDataset = await queryRecords({
197
- table_id: "bqrxzt5wq",
198
- select: ["1", "6", "7", "8"],
199
- paginate: true,
200
- max_records: "1000",
201
- options: {
202
- orderBy: [{ fieldId: "6", order: "ASC" }],
203
- top: 100
204
- }
205
- });
206
- ```
207
-
208
- ## 🧪 Testing
209
-
210
- ```bash
211
- # Run all tests
212
- npm test
139
+ ### Reporting
140
+ - **`run_report`** - Execute Quickbase reports
213
141
 
214
- # Run tests with coverage
215
- npm test -- --coverage
142
+ ## 📚 Usage Examples
216
143
 
217
- # Run tests in watch mode
218
- npm test -- --watch
144
+ ### Basic Record Query
145
+ ```
146
+ Query all customers from the Customers table
219
147
  ```
220
148
 
221
- ## 🔧 Development
222
-
223
- ### Project Structure
224
-
149
+ ### Create a New Record
225
150
  ```
226
- src/
227
- ├── client/ # Quickbase API client
228
- ├── tools/ # MCP tool implementations
229
- │ ├── apps/ # Application management tools
230
- │ ├── fields/ # Field management tools
231
- │ ├── files/ # File operation tools
232
- │ ├── records/ # Record operation tools
233
- │ ├── reports/ # Report execution tools
234
- │ └── tables/ # Table operation tools
235
- ├── types/ # TypeScript type definitions
236
- ├── utils/ # Utility functions
237
- └── mcp/ # MCP server implementation
151
+ Create a new customer record with name "Acme Corp" and status "Active"
238
152
  ```
239
153
 
240
- ### Adding New Tools
241
-
242
- 1. Create tool class extending `BaseTool<TParams, TResult>`
243
- 2. Implement required properties and `run()` method
244
- 3. Register in appropriate tool category
245
- 4. Add comprehensive tests
246
-
247
- Example:
248
-
249
- ```typescript
250
- export class MyCustomTool extends BaseTool<MyParams, MyResult> {
251
- public readonly name = 'my_custom_tool';
252
- public readonly description = 'Description of my tool';
253
- public readonly paramSchema = { /* JSON Schema */ };
254
-
255
- protected async run(params: MyParams): Promise<MyResult> {
256
- // Implementation
257
- }
258
- }
154
+ ### Upload a File
259
155
  ```
260
-
261
- ## 🚦 Deployment
262
-
263
- ### HTTP Server Mode
264
- ```bash
265
- npm start # Runs on port 3536
156
+ Upload invoice.pdf to the Documents field in record 123
266
157
  ```
267
158
 
268
- ### MCP Stdio Mode
269
- ```bash
270
- node dist/mcp-stdio-server.js
271
- ```
159
+ ## 🔒 Security
160
+
161
+ - API tokens are handled securely and never logged
162
+ - All file operations are sandboxed to the working directory
163
+ - Supports field-level permissions and access controls
272
164
 
273
165
  ## 📋 Requirements
274
166
 
275
- - **Node.js** 18+
276
- - **TypeScript** 5.2+
277
- - **Quickbase** account with API access
278
- - **Valid user token** with appropriate permissions
167
+ - Node.js 18 or higher
168
+ - Valid Quickbase account with API access
169
+ - Claude Desktop (for MCP integration)
279
170
 
280
171
  ## 🤝 Contributing
281
172
 
282
- 1. Fork the repository
283
- 2. Create a feature branch
284
- 3. Add tests for new functionality
285
- 4. Ensure all tests pass
286
- 5. Submit a pull request
173
+ Contributions are welcome! Please feel free to submit a Pull Request.
287
174
 
288
175
  ## 📄 License
289
176
 
290
- MIT License - see LICENSE file for details.
291
-
292
- ## 🆘 Support
177
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
293
178
 
294
- For issues and questions:
295
- - Check the [documentation](docs/)
296
- - Review the [Quick Start Guide](docs/quickstart.md)
297
- - Open an issue on GitHub
298
-
299
- ---
179
+ ## 🔗 Links
300
180
 
301
- Built with ❤️ for seamless Quickbase integration with AI assistants.
181
+ - [Quickbase API Documentation](https://developer.quickbase.com/)
182
+ - [Model Context Protocol](https://modelcontextprotocol.io/)
183
+ - [Claude Desktop](https://claude.ai/download)
@@ -48,14 +48,39 @@ class QuickbaseClient {
48
48
  * @param config Client configuration
49
49
  */
50
50
  constructor(config) {
51
+ // Validate and sanitize configuration
52
+ const rateLimit = config.rateLimit !== undefined ? config.rateLimit : 10;
53
+ const cacheTtl = config.cacheTtl !== undefined ? config.cacheTtl : 3600;
54
+ const maxRetries = config.maxRetries !== undefined ? config.maxRetries : 3;
55
+ const retryDelay = config.retryDelay !== undefined ? config.retryDelay : 1000;
56
+ const requestTimeout = config.requestTimeout !== undefined ? config.requestTimeout : 30000;
57
+ // Validate numeric values
58
+ if (rateLimit < 1 || rateLimit > 100) {
59
+ throw new Error('Rate limit must be between 1 and 100 requests per second');
60
+ }
61
+ if (cacheTtl < 0 || cacheTtl > 86400) { // Max 24 hours
62
+ throw new Error('Cache TTL must be between 0 and 86400 seconds (24 hours)');
63
+ }
64
+ if (maxRetries < 0 || maxRetries > 10) {
65
+ throw new Error('Max retries must be between 0 and 10');
66
+ }
67
+ if (retryDelay < 100 || retryDelay > 60000) {
68
+ throw new Error('Retry delay must be between 100ms and 60 seconds');
69
+ }
70
+ if (requestTimeout < 1000 || requestTimeout > 300000) { // 1s to 5 minutes
71
+ throw new Error('Request timeout must be between 1 second and 5 minutes');
72
+ }
51
73
  this.config = {
52
74
  userAgent: 'QuickbaseMCPConnector/2.0',
53
75
  cacheEnabled: true,
54
- cacheTtl: 3600,
55
- maxRetries: 3,
56
- retryDelay: 1000,
57
76
  debug: false,
58
- ...config
77
+ ...config,
78
+ // Override with validated values
79
+ cacheTtl,
80
+ maxRetries,
81
+ retryDelay,
82
+ requestTimeout,
83
+ rateLimit
59
84
  };
60
85
  if (!this.config.realmHost) {
61
86
  throw new Error('Realm hostname is required');
@@ -123,8 +148,9 @@ class QuickbaseClient {
123
148
  redactedHeaders.Authorization = '***REDACTED***';
124
149
  }
125
150
  if (redactedHeaders['QB-Realm-Hostname']) {
126
- // Keep realm hostname for debugging but redact sensitive parts
127
- redactedHeaders['QB-Realm-Hostname'] = redactedHeaders['QB-Realm-Hostname'].replace(/[a-zA-Z0-9-]+/, '***');
151
+ // Keep realm hostname structure for debugging but redact sensitive parts
152
+ // Example: "company-name.quickbase.com" becomes "***.quickbase.com"
153
+ redactedHeaders['QB-Realm-Hostname'] = redactedHeaders['QB-Realm-Hostname'].replace(/^[^.]+/, '***');
128
154
  }
129
155
  logger.debug('Sending API request', {
130
156
  url: url.replace(/[?&]userToken=[^&]*/g, '&userToken=***REDACTED***'), // Redact tokens in URL too
@@ -1 +1 @@
1
- {"version":3,"file":"quickbase.js","sourceRoot":"","sources":["../../src/client/quickbase.ts"],"names":[],"mappings":";;;AAEA,0CAA8C;AAC9C,4CAA+C;AAC/C,0CAAyD;AAEzD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW;IAMf,YAAY,cAAsB,EAAE,EAAE,WAAmB,IAAI;QALrD,aAAQ,GAAa,EAAE,CAAC;QAGxB,YAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAGjD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,6DAA6D;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,mDAAmD;YACnD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,eAAe;YAE5E,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,IAAI,CAAC,CAAC;gBACrD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAE5D,gEAAgE;gBAChE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAa,eAAe;IAO1B;;;OAGG;IACH,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,2BAA2B;YACtC,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,KAAK;YACZ,GAAG,MAAM;SACV,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC;QAE9C,IAAI,CAAC,OAAO,GAAG;YACb,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC1C,eAAe,EAAE,iBAAiB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACzD,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,2BAA2B;SACnE,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAY,CAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,IAAI,CAAC,MAAM,CAAC,YAAY,CACzB,CAAC;QAEF,8DAA8D;QAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAChC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAC3B,IAAI,CACL,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YAC1C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACtC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,SAAS;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAI,OAAuB;QACtC,MAAM,WAAW,GAAG,KAAK,IAA6B,EAAE;YACtD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;YAEhF,uCAAuC;YACvC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;YACnC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;gBAC3C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC9C,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBACH,GAAG,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvC,CAAC;YAED,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;YACpC,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,QAAQ,CAAC,CAAC;gBAChE,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC3D,OAAO,cAAc,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAE9B,wDAAwD;YACxD,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;YAEvD,6CAA6C;YAC7C,MAAM,eAAe,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;YAC9C,IAAI,eAAe,CAAC,aAAa,EAAE,CAAC;gBAClC,eAAe,CAAC,aAAa,GAAG,gBAAgB,CAAC;YACnD,CAAC;YACD,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACzC,+DAA+D;gBAC/D,eAAe,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAC9G,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBAClC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,2BAA2B,CAAC,EAAE,2BAA2B;gBAClG,MAAM;gBACN,OAAO,EAAE,eAAe;gBACxB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9C,CAAC,CAAC;YAEH,uCAAuC;YACvC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;YAE5F,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,MAAM;oBACN,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC7C,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,wBAAwB;YACxB,IAAI,YAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACxG,CAAC;YAED,mCAAmC;YACnC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,IAAI,GAAG,YAAuC,CAAC;YAErD,2BAA2B;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC3F,MAAM,KAAK,GAAa;oBACtB,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,QAAQ,CAAC,MAAM;oBACrB,OAAO,EAAE,IAAI;iBACd,CAAC;gBAEF,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;oBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,KAAK;iBACN,CAAC,CAAC;gBAEH,oDAAoD;gBACpD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC,CAAC;gBAC9E,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE1E,4EAA4E;gBAC5E,yEAAyE;gBACzE,MAAM,SAAS,CAAC;YAClB,CAAC;YAED,sBAAsB;YACtB,MAAM,MAAM,GAAmB;gBAC7B,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,YAAiB;aACxB,CAAC;YAEF,iCAAiC;YACjC,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,sBAAsB;QACtB,MAAM,YAAY,GAAiB;YACjC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC;YACvC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;YACzC,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC9B,oDAAoD;gBACpD,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAEzB,qBAAqB;gBACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;oBACrE,MAAM,SAAS,GAAG,KAA2B,CAAC;oBAC9C,OAAO,SAAS,CAAC,MAAM,KAAK,GAAG,IAAI,oBAAoB;wBAChD,SAAS,CAAC,MAAM,KAAK,GAAG,IAAI,kBAAkB;wBAC9C,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB;gBAC9E,CAAC;gBAED,wBAAwB;gBACxB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC9C,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAC;QAEF,IAAI,CAAC;YACH,kDAAkD;YAClD,OAAO,MAAM,IAAA,iBAAS,EAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wDAAwD;YACxD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAExD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;oBACjE,IAAI,EAAE,cAAc;iBACrB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AArOD,0CAqOC"}
1
+ {"version":3,"file":"quickbase.js","sourceRoot":"","sources":["../../src/client/quickbase.ts"],"names":[],"mappings":"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"}
@@ -62,60 +62,101 @@ async function main() {
62
62
  version: '2.0.0',
63
63
  });
64
64
  logger.info('MCP Server created');
65
- // Initialize Quickbase client
66
- const config = {
67
- realmHost: process.env.QUICKBASE_REALM_HOST || '',
68
- userToken: process.env.QUICKBASE_USER_TOKEN || '',
69
- appId: process.env.QUICKBASE_APP_ID,
70
- cacheEnabled: process.env.QUICKBASE_CACHE_ENABLED !== 'false',
71
- cacheTtl: parseInt(process.env.QUICKBASE_CACHE_TTL || '3600', 10),
72
- debug: process.env.DEBUG === 'true'
73
- };
74
- // Validate required configuration
75
- if (!config.realmHost || !config.userToken) {
76
- throw new Error('QUICKBASE_REALM_HOST and QUICKBASE_USER_TOKEN are required');
77
- }
78
- // Validate realm host format
79
- if (!config.realmHost.match(/^[a-zA-Z0-9-]+\.quickbase\.com$/)) {
80
- throw new Error('QUICKBASE_REALM_HOST must be in format: yourcompany.quickbase.com');
81
- }
82
- // Validate cache TTL
83
- if (isNaN(config.cacheTtl) || config.cacheTtl <= 0) {
84
- throw new Error('QUICKBASE_CACHE_TTL must be a positive number');
65
+ // Check if environment variables are configured
66
+ const hasConfig = process.env.QUICKBASE_REALM_HOST && process.env.QUICKBASE_USER_TOKEN;
67
+ if (!hasConfig) {
68
+ logger.warn('Quickbase configuration not found in environment variables');
69
+ logger.info('Server will start but tools will not be functional until configuration is provided');
70
+ logger.info('Required environment variables: QUICKBASE_REALM_HOST, QUICKBASE_USER_TOKEN');
85
71
  }
86
- const quickbaseClient = new quickbase_1.QuickbaseClient(config);
87
- const cacheService = new cache_1.CacheService(config.cacheTtl, config.cacheEnabled);
88
- // Initialize tools
89
- (0, tools_1.initializeTools)(quickbaseClient, cacheService);
90
- // Register tools with MCP server
91
- const tools = tools_1.toolRegistry.getAllTools();
92
- tools.forEach(tool => {
93
- const schema = (0, validation_1.createMcpZodSchema)(tool.paramSchema);
94
- server.tool(tool.name, tool.description, schema, async (params) => {
72
+ let quickbaseClient = null;
73
+ let cacheService = null;
74
+ if (hasConfig) {
75
+ // Initialize Quickbase client with configuration
76
+ const config = {
77
+ realmHost: process.env.QUICKBASE_REALM_HOST || '',
78
+ userToken: process.env.QUICKBASE_USER_TOKEN || '',
79
+ appId: process.env.QUICKBASE_APP_ID,
80
+ cacheEnabled: process.env.QUICKBASE_CACHE_ENABLED !== 'false',
81
+ cacheTtl: parseInt(process.env.QUICKBASE_CACHE_TTL || '3600', 10),
82
+ debug: process.env.DEBUG === 'true'
83
+ };
84
+ // Validate realm host format if provided
85
+ if (config.realmHost && !config.realmHost.match(/^[a-zA-Z0-9-]+\.quickbase\.com$/)) {
86
+ logger.error('QUICKBASE_REALM_HOST must be in format: yourcompany.quickbase.com');
87
+ logger.warn('Continuing without Quickbase client initialization');
88
+ }
89
+ else {
90
+ // Validate cache TTL
91
+ if (isNaN(config.cacheTtl) || config.cacheTtl <= 0) {
92
+ config.cacheTtl = 3600; // Default to 1 hour
93
+ logger.warn('Invalid QUICKBASE_CACHE_TTL, using default: 3600');
94
+ }
95
95
  try {
96
- logger.info(`Executing MCP tool: ${tool.name}`);
97
- const apiResponse = await tool.execute(params);
98
- // Handle API response - only return the data if successful
99
- if (!apiResponse.success || apiResponse.error) {
100
- const errorMessage = apiResponse.error?.message || 'Tool execution failed';
101
- logger.error(`Tool ${tool.name} failed`, { error: apiResponse.error });
102
- throw new Error(errorMessage);
103
- }
104
- return {
105
- content: [{
106
- type: 'text',
107
- text: JSON.stringify(apiResponse.data, null, 2)
108
- }]
109
- };
96
+ quickbaseClient = new quickbase_1.QuickbaseClient(config);
97
+ cacheService = new cache_1.CacheService(config.cacheTtl, config.cacheEnabled);
98
+ // Initialize tools
99
+ (0, tools_1.initializeTools)(quickbaseClient, cacheService);
100
+ logger.info('Quickbase client and tools initialized successfully');
110
101
  }
111
102
  catch (error) {
112
- logger.error(`Error executing MCP tool ${tool.name}`, { error });
113
- throw error;
103
+ logger.error('Failed to initialize Quickbase client', { error });
104
+ logger.warn('Server will continue without functional tools');
114
105
  }
115
- });
116
- logger.info(`Registered MCP tool: ${tool.name}`);
106
+ }
107
+ }
108
+ // Register a configuration check tool that's always available
109
+ server.tool('check_configuration', 'Check if Quickbase configuration is properly set up', {}, async () => {
110
+ const configured = !!quickbaseClient;
111
+ const status = configured ?
112
+ 'Quickbase client is configured and ready' :
113
+ 'Quickbase client is not configured. Please set QUICKBASE_REALM_HOST and QUICKBASE_USER_TOKEN environment variables';
114
+ return {
115
+ content: [{
116
+ type: 'text',
117
+ text: JSON.stringify({
118
+ configured,
119
+ status,
120
+ requiredVars: ['QUICKBASE_REALM_HOST', 'QUICKBASE_USER_TOKEN'],
121
+ optionalVars: ['QUICKBASE_APP_ID', 'QUICKBASE_CACHE_ENABLED', 'QUICKBASE_CACHE_TTL', 'DEBUG']
122
+ }, null, 2)
123
+ }]
124
+ };
117
125
  });
118
- logger.info(`Registered ${tools.length} tools with MCP Server`);
126
+ // Register tools with MCP server if client is initialized
127
+ if (quickbaseClient) {
128
+ const tools = tools_1.toolRegistry.getAllTools();
129
+ tools.forEach(tool => {
130
+ const schema = (0, validation_1.createMcpZodSchema)(tool.paramSchema);
131
+ server.tool(tool.name, tool.description, schema, async (params) => {
132
+ try {
133
+ logger.info(`Executing MCP tool: ${tool.name}`);
134
+ const apiResponse = await tool.execute(params);
135
+ // Handle API response - only return the data if successful
136
+ if (!apiResponse.success || apiResponse.error) {
137
+ const errorMessage = apiResponse.error?.message || 'Tool execution failed';
138
+ logger.error(`Tool ${tool.name} failed`, { error: apiResponse.error });
139
+ throw new Error(errorMessage);
140
+ }
141
+ return {
142
+ content: [{
143
+ type: 'text',
144
+ text: JSON.stringify(apiResponse.data, null, 2)
145
+ }]
146
+ };
147
+ }
148
+ catch (error) {
149
+ logger.error(`Error executing MCP tool ${tool.name}`, { error });
150
+ throw error;
151
+ }
152
+ });
153
+ logger.info(`Registered MCP tool: ${tool.name}`);
154
+ });
155
+ logger.info(`Registered ${tools.length} Quickbase tools with MCP Server`);
156
+ }
157
+ else {
158
+ logger.info('No Quickbase tools registered (configuration missing)');
159
+ }
119
160
  // Create stdio transport
120
161
  const transport = new stdio_js_1.StdioServerTransport();
121
162
  // Connect and run
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-stdio-server.js","sourceRoot":"","sources":["../src/mcp-stdio-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-stdio-server.js","sourceRoot":"","sources":["../src/mcp-stdio-server.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Utility functions for file operations
3
- */
4
1
  /**
5
2
  * Check if a file exists
6
3
  * @param filePath File path to check
@@ -43,8 +43,40 @@ const path = __importStar(require("path"));
43
43
  const logger_1 = require("./logger");
44
44
  const logger = (0, logger_1.createLogger)('FileUtil');
45
45
  /**
46
- * Utility functions for file operations
46
+ * Utility functions for file operations with security hardening
47
47
  */
48
+ // Maximum file size for reads (10MB)
49
+ const MAX_FILE_SIZE = 10 * 1024 * 1024;
50
+ // Get the working directory (can be overridden by environment variable)
51
+ const WORKING_DIR = process.env.QUICKBASE_WORKING_DIR || process.cwd();
52
+ /**
53
+ * Validate and sanitize a file path to prevent directory traversal
54
+ * @param filePath The file path to validate
55
+ * @returns Sanitized absolute path or null if invalid
56
+ */
57
+ function sanitizePath(filePath) {
58
+ try {
59
+ // Resolve to absolute path
60
+ const absolutePath = path.resolve(WORKING_DIR, filePath);
61
+ // Ensure the path is within the working directory
62
+ const relative = path.relative(WORKING_DIR, absolutePath);
63
+ // Check for directory traversal attempts
64
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
65
+ logger.error('Path traversal attempt detected', {
66
+ filePath,
67
+ absolutePath,
68
+ relative,
69
+ workingDir: WORKING_DIR
70
+ });
71
+ return null;
72
+ }
73
+ return absolutePath;
74
+ }
75
+ catch (error) {
76
+ logger.error('Error sanitizing path', { filePath, error });
77
+ return null;
78
+ }
79
+ }
48
80
  /**
49
81
  * Check if a file exists
50
82
  * @param filePath File path to check
@@ -52,7 +84,11 @@ const logger = (0, logger_1.createLogger)('FileUtil');
52
84
  */
53
85
  function fileExists(filePath) {
54
86
  try {
55
- return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
87
+ const safePath = sanitizePath(filePath);
88
+ if (!safePath) {
89
+ return false;
90
+ }
91
+ return fs.existsSync(safePath) && fs.statSync(safePath).isFile();
56
92
  }
57
93
  catch (error) {
58
94
  logger.error('Error checking if file exists', { filePath, error });
@@ -66,11 +102,15 @@ function fileExists(filePath) {
66
102
  */
67
103
  function ensureDirectoryExists(dirPath) {
68
104
  try {
69
- if (fs.existsSync(dirPath)) {
70
- return fs.statSync(dirPath).isDirectory();
105
+ const safePath = sanitizePath(dirPath);
106
+ if (!safePath) {
107
+ return false;
108
+ }
109
+ if (fs.existsSync(safePath)) {
110
+ return fs.statSync(safePath).isDirectory();
71
111
  }
72
112
  // Create the directory
73
- fs.mkdirSync(dirPath, { recursive: true });
113
+ fs.mkdirSync(safePath, { recursive: true });
74
114
  return true;
75
115
  }
76
116
  catch (error) {
@@ -85,10 +125,11 @@ function ensureDirectoryExists(dirPath) {
85
125
  */
86
126
  function getFileInfo(filePath) {
87
127
  try {
88
- if (!fileExists(filePath)) {
128
+ const safePath = sanitizePath(filePath);
129
+ if (!safePath || !fileExists(filePath)) {
89
130
  return null;
90
131
  }
91
- const stats = fs.statSync(filePath);
132
+ const stats = fs.statSync(safePath);
92
133
  const ext = path.extname(filePath).toLowerCase();
93
134
  // Simple mime type mapping
94
135
  const mimeTypes = {
@@ -132,11 +173,26 @@ function getFileInfo(filePath) {
132
173
  */
133
174
  function readFileAsBuffer(filePath) {
134
175
  try {
176
+ const safePath = sanitizePath(filePath);
177
+ if (!safePath) {
178
+ logger.error('Invalid file path', { filePath });
179
+ return null;
180
+ }
135
181
  if (!fileExists(filePath)) {
136
182
  logger.error('File does not exist', { filePath });
137
183
  return null;
138
184
  }
139
- return fs.readFileSync(filePath);
185
+ // Check file size before reading
186
+ const stats = fs.statSync(safePath);
187
+ if (stats.size > MAX_FILE_SIZE) {
188
+ logger.error('File too large', {
189
+ filePath,
190
+ size: stats.size,
191
+ maxSize: MAX_FILE_SIZE
192
+ });
193
+ return null;
194
+ }
195
+ return fs.readFileSync(safePath);
140
196
  }
141
197
  catch (error) {
142
198
  logger.error('Error reading file', { filePath, error });
@@ -151,12 +207,28 @@ function readFileAsBuffer(filePath) {
151
207
  */
152
208
  function writeFile(filePath, data) {
153
209
  try {
154
- const dirPath = path.dirname(filePath);
155
- if (!ensureDirectoryExists(dirPath)) {
156
- logger.error('Could not create directory for file', { dirPath });
210
+ const safePath = sanitizePath(filePath);
211
+ if (!safePath) {
212
+ logger.error('Invalid file path', { filePath });
213
+ return false;
214
+ }
215
+ const dirPath = path.dirname(safePath);
216
+ const safeDirPath = sanitizePath(dirPath);
217
+ if (!safeDirPath || !ensureDirectoryExists(safeDirPath)) {
218
+ logger.error('Could not create directory for file', { dirPath: safeDirPath });
219
+ return false;
220
+ }
221
+ // Check data size limit
222
+ const dataSize = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);
223
+ if (dataSize > MAX_FILE_SIZE) {
224
+ logger.error('Data too large to write', {
225
+ filePath,
226
+ size: dataSize,
227
+ maxSize: MAX_FILE_SIZE
228
+ });
157
229
  return false;
158
230
  }
159
- fs.writeFileSync(filePath, data);
231
+ fs.writeFileSync(safePath, data);
160
232
  return true;
161
233
  }
162
234
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-quickbase",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Work with Quickbase via Model Context Protocol",
5
5
  "main": "dist/mcp-stdio-server.js",
6
6
  "types": "dist/mcp-stdio-server.d.ts",