@mseep/csv-editor 1.0.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.
Files changed (106) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +53 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +38 -0
  3. package/.github/workflows/deploy-docs.yml +62 -0
  4. package/.github/workflows/publish-github.yml +52 -0
  5. package/.github/workflows/publish.yml +44 -0
  6. package/.github/workflows/test.yml +32 -0
  7. package/.pre-commit-config.yaml +157 -0
  8. package/ALTERNATIVE_PUBLISHING.md +175 -0
  9. package/ARCHITECTURE.md +1011 -0
  10. package/CHANGELOG.md +99 -0
  11. package/CODE_OF_CONDUCT.md +41 -0
  12. package/CONTRIBUTING.md +427 -0
  13. package/Dockerfile +22 -0
  14. package/LICENSE +21 -0
  15. package/MCP_CONFIG.md +505 -0
  16. package/PUBLISHING.md +210 -0
  17. package/README.md +400 -0
  18. package/SECURITY.md +61 -0
  19. package/docs/README.md +41 -0
  20. package/docs/blog/2019-05-28-first-blog-post.md +12 -0
  21. package/docs/blog/2019-05-29-long-blog-post.md +44 -0
  22. package/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  23. package/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  24. package/docs/blog/2021-08-26-welcome/index.md +29 -0
  25. package/docs/blog/authors.yml +25 -0
  26. package/docs/blog/tags.yml +19 -0
  27. package/docs/docs/api/overview.md +183 -0
  28. package/docs/docs/installation.md +252 -0
  29. package/docs/docs/intro.md +87 -0
  30. package/docs/docs/tutorial-basics/_category_.json +8 -0
  31. package/docs/docs/tutorial-basics/congratulations.md +23 -0
  32. package/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  33. package/docs/docs/tutorial-basics/create-a-document.md +57 -0
  34. package/docs/docs/tutorial-basics/create-a-page.md +43 -0
  35. package/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  36. package/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  37. package/docs/docs/tutorial-extras/_category_.json +7 -0
  38. package/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  39. package/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  40. package/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  41. package/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  42. package/docs/docs/tutorials/quickstart.md +365 -0
  43. package/docs/docusaurus.config.ts +163 -0
  44. package/docs/package-lock.json +17493 -0
  45. package/docs/package.json +48 -0
  46. package/docs/sidebars.ts +33 -0
  47. package/docs/src/components/HomepageFeatures/index.tsx +71 -0
  48. package/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  49. package/docs/src/css/custom.css +30 -0
  50. package/docs/src/pages/index.module.css +23 -0
  51. package/docs/src/pages/index.tsx +44 -0
  52. package/docs/src/pages/markdown-page.md +7 -0
  53. package/docs/static/.nojekyll +0 -0
  54. package/docs/static/img/docusaurus-social-card.jpg +0 -0
  55. package/docs/static/img/docusaurus.png +0 -0
  56. package/docs/static/img/favicon.ico +0 -0
  57. package/docs/static/img/logo.svg +1 -0
  58. package/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  59. package/docs/static/img/undraw_docusaurus_react.svg +170 -0
  60. package/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  61. package/docs/tsconfig.json +8 -0
  62. package/examples/README.md +48 -0
  63. package/examples/auto_save_demo.py +206 -0
  64. package/examples/auto_save_overwrite.py +201 -0
  65. package/examples/basic_usage.py +135 -0
  66. package/examples/demo.py +139 -0
  67. package/examples/history_demo.py +317 -0
  68. package/examples/test_default_autosave.py +124 -0
  69. package/examples/update_consignee_example.py +179 -0
  70. package/package.json +51 -0
  71. package/plans/2026-04-19-fastmcp3-migration-plan.md +1045 -0
  72. package/pyproject.toml +331 -0
  73. package/requirements-dev.txt +30 -0
  74. package/requirements.txt +22 -0
  75. package/scripts/publish.py +67 -0
  76. package/smithery.yaml +15 -0
  77. package/specs/2026-04-19-fastmcp3-migration-design.md +243 -0
  78. package/src/csv_editor/__init__.py +8 -0
  79. package/src/csv_editor/models/__init__.py +39 -0
  80. package/src/csv_editor/models/auto_save.py +246 -0
  81. package/src/csv_editor/models/csv_session.py +468 -0
  82. package/src/csv_editor/models/data_models.py +244 -0
  83. package/src/csv_editor/models/history_manager.py +456 -0
  84. package/src/csv_editor/prompts/__init__.py +0 -0
  85. package/src/csv_editor/prompts/data_prompts.py +13 -0
  86. package/src/csv_editor/resources/__init__.py +0 -0
  87. package/src/csv_editor/resources/csv_resources.py +22 -0
  88. package/src/csv_editor/server.py +640 -0
  89. package/src/csv_editor/tools/__init__.py +5 -0
  90. package/src/csv_editor/tools/analytics.py +700 -0
  91. package/src/csv_editor/tools/auto_save_operations.py +235 -0
  92. package/src/csv_editor/tools/data_operations.py +3 -0
  93. package/src/csv_editor/tools/history_operations.py +315 -0
  94. package/src/csv_editor/tools/io_operations.py +431 -0
  95. package/src/csv_editor/tools/transformations.py +663 -0
  96. package/src/csv_editor/tools/validation.py +822 -0
  97. package/src/csv_editor/utils/__init__.py +0 -0
  98. package/src/csv_editor/utils/validators.py +205 -0
  99. package/tests/README.md +65 -0
  100. package/tests/__init__.py +7 -0
  101. package/tests/conftest.py +50 -0
  102. package/tests/test_auto_save.py +378 -0
  103. package/tests/test_basic.py +103 -0
  104. package/tests/test_integration.py +356 -0
  105. package/tests/test_server_boot.py +50 -0
  106. package/tests/test_settings.py +184 -0
package/README.md ADDED
@@ -0,0 +1,400 @@
1
+ # CSV Editor - AI-Powered CSV Processing via MCP
2
+
3
+ [![Python](https://img.shields.io/badge/Python-3.11%2B-blue)](https://www.python.org/)
4
+ [![MCP](https://img.shields.io/badge/MCP-Compatible-green)](https://modelcontextprotocol.io/)
5
+ [![License](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)
6
+ [![FastMCP](https://img.shields.io/badge/Built%20with-FastMCP-purple)](https://github.com/jlowin/fastmcp)
7
+ [![Pandas](https://img.shields.io/badge/Powered%20by-Pandas-150458)](https://pandas.pydata.org/)
8
+ [![smithery badge](https://smithery.ai/badge/@santoshray02/csv-editor)](https://smithery.ai/server/@santoshray02/csv-editor)
9
+
10
+ **Stateful CSV editing for AI assistants.** CSV Editor is an MCP server that gives Claude, ChatGPT, Cursor, Windsurf, and other MCP clients a full suite of CSV operations — with sessions, undo/redo, and auto-save built in. Most data MCPs are analyze-only; this one lets the AI *edit*.
11
+
12
+ <a href="https://glama.ai/mcp/servers/@santoshray02/csv-editor">
13
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@santoshray02/csv-editor/badge" alt="CSV Editor MCP server" />
14
+ </a>
15
+
16
+ ## 🆕 What's new in v2.0.0 (April 2026)
17
+
18
+ - **FastMCP 3.x** — migrated from FastMCP 2 to 3.2, aligning with MCP spec [2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25).
19
+ - **Python 3.11+ required** (was 3.10+). Tested against 3.11 / 3.12 / 3.13 / 3.14.
20
+ - **`--transport sse` removed.** Use `--transport http` (Streamable HTTP) for remote deployments. SSE was deprecated by FastMCP 3.
21
+ - Dependency refresh: pydantic 2.13, pyarrow 23, httpx 0.28.
22
+ - New `CSV_EDITOR_CSV_HISTORY_DIR` env var for configuring the history directory.
23
+ - First-class CI test matrix on GitHub Actions.
24
+
25
+ Users who pinned `csv-editor>=1,<2` are unaffected and will continue to receive 1.x patches if needed. See [CHANGELOG.md](CHANGELOG.md) for the full list of breaking changes.
26
+
27
+ ## 🎯 Why CSV Editor?
28
+
29
+ ### The Problem
30
+ AI assistants struggle with complex data operations - they can read files but lack tools for filtering, transforming, analyzing, and validating CSV data efficiently.
31
+
32
+ ### The Solution
33
+ CSV Editor bridges this gap by providing AI assistants with 39 specialized tools for CSV operations, turning them into powerful data analysts that can:
34
+ - Clean messy datasets in seconds
35
+ - Perform complex statistical analysis
36
+ - Validate data quality automatically
37
+ - Transform data with natural language commands
38
+ - Track all changes with undo/redo capabilities
39
+
40
+ ### Key differentiators vs. other CSV / tabular MCPs
41
+
42
+ | Capability | CSV Editor | DuckDB / Polars MCPs | Most pandas-based MCPs |
43
+ |---|---|---|---|
44
+ | **Stateful editing** (load → mutate → save) | ✅ | Read-only or single-shot | Partial |
45
+ | **Undo / redo with snapshots** | ✅ | ❌ | ❌ |
46
+ | **Multi-session isolation** | ✅ | Limited | Limited |
47
+ | **Auto-save with strategies** | ✅ (overwrite / backup / versioned / custom) | ❌ | ❌ |
48
+ | **Quality scoring & validation** | ✅ | SQL-only | Via separate tools |
49
+ | **File-size sweet spot** | <1 GB (pandas) | 50 GB+ (streaming SQL) | Small–medium |
50
+ | **Best for** | Edit-and-review workflows | Large-file analytics | Quick analysis |
51
+
52
+ **When to pick CSV Editor:** you want the AI to *make changes* to a CSV and iterate, not just answer questions about it. If your workload is read-only analytics on multi-GB files, a DuckDB-based MCP is likely a better fit; CSV Editor's DuckDB/Polars engine support is tracked on the [roadmap](#-roadmap).
53
+
54
+ ## ⚡ Quick Demo
55
+
56
+ ```python
57
+ # Your AI assistant can now do this:
58
+ "Load the sales data and remove duplicates"
59
+ "Filter for Q4 2024 transactions over $10,000"
60
+ "Calculate correlation between price and quantity"
61
+ "Fill missing values with the median"
62
+ "Export as Excel with the analysis"
63
+
64
+ # All with automatic history tracking and undo capability!
65
+ ```
66
+
67
+ ## 🚀 Quick Start (2 minutes)
68
+
69
+ ### Installing via Smithery
70
+
71
+ To install csv-editor for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@santoshray02/csv-editor):
72
+
73
+ ```bash
74
+ npx -y @smithery/cli install @santoshray02/csv-editor --client claude
75
+ ```
76
+
77
+ ### Fastest Installation (Recommended)
78
+
79
+ ```bash
80
+ # Install uv if needed (one-time setup)
81
+ curl -LsSf https://astral.sh/uv/install.sh | sh
82
+
83
+ # Clone and run
84
+ git clone https://github.com/santoshray02/csv-editor.git
85
+ cd csv-editor
86
+ uv sync
87
+ uv run csv-editor
88
+ ```
89
+
90
+ ### Configure Your AI Assistant
91
+
92
+ <details>
93
+ <summary><b>Claude Desktop</b> (click to expand)</summary>
94
+
95
+ Add to your `claude_desktop_config.json`:
96
+
97
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
98
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
99
+ - **Linux:** `~/.config/Claude/claude_desktop_config.json`
100
+
101
+ ```json
102
+ {
103
+ "mcpServers": {
104
+ "csv-editor": {
105
+ "command": "uv",
106
+ "args": ["tool", "run", "csv-editor"],
107
+ "env": {
108
+ "CSV_MAX_FILE_SIZE": "1073741824"
109
+ }
110
+ }
111
+ }
112
+ }
113
+ ```
114
+ </details>
115
+
116
+ <details>
117
+ <summary><b>Claude Code, Cursor, Windsurf, VS Code Copilot, Cline, Continue, Zed</b></summary>
118
+
119
+ Any MCP-capable client works with stdio transport. See [MCP_CONFIG.md](MCP_CONFIG.md) for per-client setup.
120
+ </details>
121
+
122
+ <details>
123
+ <summary><b>ChatGPT Connectors (remote HTTP)</b></summary>
124
+
125
+ ChatGPT Connectors require remote Streamable HTTP with OAuth, which is tracked on the [roadmap](#-roadmap) but not yet in v2.0.0. Use stdio-based clients (Claude Desktop, Claude Code, Cursor, etc.) in the meantime.
126
+ </details>
127
+
128
+ ## 💡 Real-World Use Cases
129
+
130
+ ### 📊 Data Analyst Workflow
131
+ ```python
132
+ # Morning: Load yesterday's data
133
+ session = load_csv("daily_sales.csv")
134
+
135
+ # Clean: Remove duplicates and fix types
136
+ remove_duplicates(session_id)
137
+ change_column_type("date", "datetime")
138
+ fill_missing_values(strategy="median", columns=["revenue"])
139
+
140
+ # Analyze: Get insights
141
+ get_statistics(columns=["revenue", "quantity"])
142
+ detect_outliers(method="iqr", threshold=1.5)
143
+ get_correlation_matrix(min_correlation=0.5)
144
+
145
+ # Report: Export cleaned data
146
+ export_csv(format="excel", file_path="clean_sales.xlsx")
147
+ ```
148
+
149
+ ### 🏭 ETL Pipeline
150
+ ```python
151
+ # Extract from multiple sources
152
+ load_csv_from_url("https://api.example.com/data.csv")
153
+
154
+ # Transform with complex operations
155
+ filter_rows(conditions=[
156
+ {"column": "status", "operator": "==", "value": "active"},
157
+ {"column": "amount", "operator": ">", "value": 1000}
158
+ ])
159
+ add_column(name="quarter", formula="Q{(month-1)//3 + 1}")
160
+ group_by_aggregate(group_by=["quarter"], aggregations={
161
+ "amount": ["sum", "mean"],
162
+ "customer_id": "count"
163
+ })
164
+
165
+ # Load to different formats
166
+ export_csv(format="parquet") # For data warehouse
167
+ export_csv(format="json") # For API
168
+ ```
169
+
170
+ ### 🔍 Data Quality Assurance
171
+ ```python
172
+ # Validate incoming data
173
+ validate_schema(schema={
174
+ "customer_id": {"type": "integer", "required": True},
175
+ "email": {"type": "string", "pattern": r"^[^@]+@[^@]+\.[^@]+$"},
176
+ "age": {"type": "integer", "min": 0, "max": 120}
177
+ })
178
+
179
+ # Quality scoring
180
+ quality_report = check_data_quality()
181
+ # Returns: overall_score, missing_data%, duplicates, outliers
182
+
183
+ # Anomaly detection
184
+ anomalies = find_anomalies(methods=["statistical", "pattern"])
185
+ ```
186
+
187
+ ## 🎨 Core Features
188
+
189
+ ### Data Operations
190
+ - **Load & Export**: CSV, JSON, Excel, Parquet, HTML, Markdown
191
+ - **Transform**: Filter, sort, group, pivot, join
192
+ - **Clean**: Remove duplicates, handle missing values, fix types
193
+ - **Calculate**: Add computed columns, aggregations
194
+
195
+ ### Analysis Tools
196
+ - **Statistics**: Descriptive stats, correlations, distributions
197
+ - **Outliers**: IQR, Z-score, custom thresholds
198
+ - **Profiling**: Complete data quality reports
199
+ - **Validation**: Schema checking, quality scoring
200
+
201
+ ### Productivity Features
202
+ - **Auto-Save**: Never lose work with configurable strategies
203
+ - **History**: Full undo/redo with operation tracking
204
+ - **Sessions**: Multi-user support with isolation
205
+ - **Performance**: Stream processing for large files
206
+
207
+ ## 📚 Available Tools
208
+
209
+ <details>
210
+ <summary><b>Complete tool list (39 tools)</b></summary>
211
+
212
+ ### Server info (2)
213
+ - `health_check` — health status + active session count
214
+ - `get_server_info` — capabilities, supported formats, limits
215
+
216
+ ### I/O operations (7)
217
+ - `load_csv` — Load from file
218
+ - `load_csv_from_url` — Load from URL
219
+ - `load_csv_from_content` — Load from string
220
+ - `export_csv` — Export to various formats (csv, tsv, json, excel, parquet, html, markdown)
221
+ - `get_session_info` — Session details
222
+ - `list_sessions` — Active sessions
223
+ - `close_session` — Cleanup
224
+
225
+ ### Data manipulation (10)
226
+ - `filter_rows` — Complex filtering
227
+ - `sort_data` — Multi-column sort
228
+ - `select_columns` — Column selection
229
+ - `rename_columns` — Rename columns
230
+ - `add_column` — Add computed columns
231
+ - `remove_columns` — Remove columns
232
+ - `update_column` — Update values
233
+ - `change_column_type` — Type conversion
234
+ - `fill_missing_values` — Handle nulls
235
+ - `remove_duplicates` — Deduplicate
236
+
237
+ ### Analysis (7)
238
+ - `get_statistics` — Statistical summary
239
+ - `get_column_statistics` — Column stats
240
+ - `get_correlation_matrix` — Correlations
241
+ - `group_by_aggregate` — Group operations
242
+ - `get_value_counts` — Frequency counts
243
+ - `detect_outliers` — Find outliers (IQR, Z-score)
244
+ - `profile_data` — Data profiling
245
+
246
+ ### Validation (3)
247
+ - `validate_schema` — Schema validation
248
+ - `check_data_quality` — Quality metrics + overall score
249
+ - `find_anomalies` — Anomaly detection
250
+
251
+ ### Auto-save (4)
252
+ - `configure_auto_save` — Setup auto-save strategy
253
+ - `disable_auto_save` — Turn off auto-save
254
+ - `get_auto_save_status` — Check status
255
+ - `trigger_manual_save` — Force a save now
256
+
257
+ ### History (6)
258
+ - `undo` — Step back one operation
259
+ - `redo` — Step forward after undo
260
+ - `get_history` — View operations log
261
+ - `restore_to_operation` — Time travel to a specific operation
262
+ - `clear_history` — Reset history
263
+ - `export_history` — Export operations log
264
+
265
+ </details>
266
+
267
+ ## ⚙️ Configuration
268
+
269
+ ### Environment variables
270
+
271
+ | Variable | Default | Description |
272
+ |---|---|---|
273
+ | `CSV_MAX_FILE_SIZE` | `1024` (MB) | Maximum file size (megabytes) |
274
+ | `CSV_SESSION_TIMEOUT` | `60` (minutes) | Session timeout |
275
+ | `CSV_EDITOR_CSV_HISTORY_DIR` | `.csv_history` | Directory for persisted operation history |
276
+
277
+ ### Auto-Save Strategies
278
+
279
+ CSV Editor automatically saves your work with configurable strategies:
280
+
281
+ - **Overwrite** (default) - Update original file
282
+ - **Backup** - Create timestamped backups
283
+ - **Versioned** - Maintain version history
284
+ - **Custom** - Save to specified location
285
+
286
+ ```python
287
+ # Configure auto-save
288
+ configure_auto_save(
289
+ strategy="backup",
290
+ backup_dir="/backups",
291
+ max_backups=10
292
+ )
293
+ ```
294
+
295
+ ## 🛠️ Advanced Installation Options
296
+
297
+ <details>
298
+ <summary><b>Alternative Installation Methods</b></summary>
299
+
300
+ ### Using pip
301
+ ```bash
302
+ git clone https://github.com/santoshray02/csv-editor.git
303
+ cd csv-editor
304
+ pip install -e .
305
+ ```
306
+
307
+ ### Using pipx (Global)
308
+ ```bash
309
+ pipx install git+https://github.com/santoshray02/csv-editor.git
310
+ ```
311
+
312
+ ### From PyPI (once v2.0.0 is live)
313
+ ```bash
314
+ pip install csv-editor # latest
315
+ pip install csv-editor==2.0.0 # pinned
316
+ # Or with uv:
317
+ uv tool install csv-editor
318
+ ```
319
+
320
+ ### From GitHub
321
+ ```bash
322
+ # Latest main
323
+ pip install git+https://github.com/santoshray02/csv-editor.git
324
+
325
+ # Specific release
326
+ pip install git+https://github.com/santoshray02/csv-editor.git@v2.0.0
327
+
328
+ # Or with uv
329
+ uv pip install git+https://github.com/santoshray02/csv-editor.git@v2.0.0
330
+ ```
331
+
332
+ </details>
333
+
334
+ ## 🧪 Development
335
+
336
+ ### Running tests
337
+ ```bash
338
+ uv run pytest tests/ -v # Run tests
339
+ uv run pytest tests/ --cov=src/csv_editor # With coverage
340
+ uv run ruff check src/ tests/ # Lint
341
+ uv run black --check src/ tests/ # Format check
342
+ uv run mypy src/ # Type check
343
+ ```
344
+
345
+ CI runs the full pytest matrix on Python 3.11–3.14 for every push to main — see [.github/workflows/test.yml](.github/workflows/test.yml).
346
+
347
+ ### Project Structure
348
+ ```
349
+ csv-editor/
350
+ ├── src/csv_editor/ # Core implementation
351
+ │ ├── tools/ # MCP tool implementations
352
+ │ ├── models/ # Data models
353
+ │ └── server.py # MCP server
354
+ ├── tests/ # Test suite
355
+ ├── examples/ # Usage examples
356
+ └── docs/ # Documentation
357
+ ```
358
+
359
+ ## 🤝 Contributing
360
+
361
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
362
+
363
+ ### Quick Contribution Guide
364
+ 1. Fork the repository
365
+ 2. Create a feature branch
366
+ 3. Make your changes with tests
367
+ 4. Run `uv run pytest tests/` and `uv run ruff check src/ tests/`
368
+ 5. Submit a pull request
369
+
370
+ ## 📈 Roadmap
371
+
372
+ Post-v2.0.0 priorities (see the [2026 relevance audit](specs/2026-04-19-fastmcp3-migration-design.md) for context):
373
+
374
+ - [ ] **pandas 3.0 / numpy 2.4** — Copy-on-Write migration, Arrow-backed default strings (follow-up to v2.0.0).
375
+ - [ ] **DuckDB + Polars engines** — swappable backends with DuckDB as the default for files >100 MB (closes the large-file gap).
376
+ - [ ] **MCP async Tasks + Resource Links** — non-blocking `load_csv` / `export_csv` / `profile_data` for GB files; paginated large results.
377
+ - [ ] **Remote HTTP + OAuth (CIMD)** — enables ChatGPT Connectors and VS Code Copilot remote usage.
378
+ - [ ] **Elicitation** — prompt for ambiguous CSV dialect / encoding / dtype at load time instead of failing.
379
+ - [ ] **Docs migration** — Docusaurus → MkDocs-Material with `mkdocstrings` for auto-generated API docs.
380
+
381
+ ## 💬 Support
382
+
383
+ - **Issues**: [GitHub Issues](https://github.com/santoshray02/csv-editor/issues)
384
+ - **Discussions**: [GitHub Discussions](https://github.com/santoshray02/csv-editor/discussions)
385
+ - **Documentation**: [Wiki](https://github.com/santoshray02/csv-editor/wiki)
386
+
387
+ ## 📄 License
388
+
389
+ MIT License - see [LICENSE](LICENSE) file
390
+
391
+ ## 🙏 Acknowledgments
392
+
393
+ Built with:
394
+ - [FastMCP](https://github.com/jlowin/fastmcp) - Fast Model Context Protocol
395
+ - [Pandas](https://pandas.pydata.org/) - Data manipulation
396
+ - [NumPy](https://numpy.org/) - Numerical computing
397
+
398
+ ---
399
+
400
+ **Ready to supercharge your AI's data capabilities?** [Get started in 2 minutes →](#-quick-start-2-minutes)
package/SECURITY.md ADDED
@@ -0,0 +1,61 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We actively support the following versions of CSV Editor:
6
+
7
+ | Version | Supported |
8
+ | ------- | ------------------ |
9
+ | 1.0.x | :white_check_mark: |
10
+ | < 1.0 | :x: |
11
+
12
+ ## Reporting a Vulnerability
13
+
14
+ We take security vulnerabilities seriously. If you discover a security vulnerability in CSV Editor, please report it responsibly.
15
+
16
+ ### How to Report
17
+
18
+ 1. **Email**: Send details to rayskumar02@gmail.com
19
+ 2. **Subject**: Include "CSV Editor Security" in the subject line
20
+ 3. **Details**: Provide a detailed description of the vulnerability
21
+
22
+ ### What to Include
23
+
24
+ - Description of the vulnerability
25
+ - Steps to reproduce the issue
26
+ - Potential impact assessment
27
+ - Suggested fix (if available)
28
+
29
+ ### Response Timeline
30
+
31
+ - **Initial Response**: Within 24 hours
32
+ - **Status Update**: Within 72 hours
33
+ - **Fix Timeline**: Depends on severity (1-30 days)
34
+
35
+ ### Security Best Practices
36
+
37
+ When using CSV Editor:
38
+
39
+ 1. **Input Validation**: Always validate CSV files before processing
40
+ 2. **File Permissions**: Ensure proper file permissions for CSV files
41
+ 3. **Network Security**: Use HTTPS when running in HTTP mode
42
+ 4. **Access Control**: Limit MCP server access to trusted clients
43
+ 5. **Regular Updates**: Keep CSV Editor updated to the latest version
44
+
45
+ ### Disclosure Policy
46
+
47
+ - We will acknowledge receipt of your vulnerability report
48
+ - We will provide regular updates on our progress
49
+ - We will credit you in the security advisory (unless you prefer anonymity)
50
+ - We will coordinate disclosure timing with you
51
+
52
+ ### Security Features
53
+
54
+ CSV Editor includes several security features:
55
+
56
+ - Input sanitization for CSV data
57
+ - File path validation to prevent directory traversal
58
+ - Memory usage limits to prevent DoS attacks
59
+ - Error handling to prevent information disclosure
60
+
61
+ Thank you for helping keep CSV Editor secure!
package/docs/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # Website
2
+
3
+ This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ yarn
9
+ ```
10
+
11
+ ## Local Development
12
+
13
+ ```bash
14
+ yarn start
15
+ ```
16
+
17
+ This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
18
+
19
+ ## Build
20
+
21
+ ```bash
22
+ yarn build
23
+ ```
24
+
25
+ This command generates static content into the `build` directory and can be served using any static contents hosting service.
26
+
27
+ ## Deployment
28
+
29
+ Using SSH:
30
+
31
+ ```bash
32
+ USE_SSH=true yarn deploy
33
+ ```
34
+
35
+ Not using SSH:
36
+
37
+ ```bash
38
+ GIT_USER=<Your GitHub username> yarn deploy
39
+ ```
40
+
41
+ If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
@@ -0,0 +1,12 @@
1
+ ---
2
+ slug: first-blog-post
3
+ title: First Blog Post
4
+ authors: [slorber, yangshun]
5
+ tags: [hola, docusaurus]
6
+ ---
7
+
8
+ Lorem ipsum dolor sit amet...
9
+
10
+ <!-- truncate -->
11
+
12
+ ...consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
@@ -0,0 +1,44 @@
1
+ ---
2
+ slug: long-blog-post
3
+ title: Long Blog Post
4
+ authors: yangshun
5
+ tags: [hello, docusaurus]
6
+ ---
7
+
8
+ This is the summary of a very long blog post,
9
+
10
+ Use a `<!--` `truncate` `-->` comment to limit blog post size in the list view.
11
+
12
+ <!-- truncate -->
13
+
14
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
15
+
16
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
17
+
18
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
19
+
20
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
21
+
22
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
23
+
24
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
25
+
26
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
27
+
28
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
29
+
30
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
31
+
32
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
33
+
34
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
35
+
36
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
37
+
38
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
39
+
40
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
41
+
42
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
43
+
44
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
@@ -0,0 +1,24 @@
1
+ ---
2
+ slug: mdx-blog-post
3
+ title: MDX Blog Post
4
+ authors: [slorber]
5
+ tags: [docusaurus]
6
+ ---
7
+
8
+ Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).
9
+
10
+ :::tip
11
+
12
+ Use the power of React to create interactive blog posts.
13
+
14
+ :::
15
+
16
+ {/* truncate */}
17
+
18
+ For example, use JSX to create an interactive button:
19
+
20
+ ```js
21
+ <button onClick={() => alert('button clicked!')}>Click me!</button>
22
+ ```
23
+
24
+ <button onClick={() => alert('button clicked!')}>Click me!</button>
@@ -0,0 +1,29 @@
1
+ ---
2
+ slug: welcome
3
+ title: Welcome
4
+ authors: [slorber, yangshun]
5
+ tags: [facebook, hello, docusaurus]
6
+ ---
7
+
8
+ [Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).
9
+
10
+ Here are a few tips you might find useful.
11
+
12
+ <!-- truncate -->
13
+
14
+ Simply add Markdown files (or folders) to the `blog` directory.
15
+
16
+ Regular blog authors can be added to `authors.yml`.
17
+
18
+ The blog post date can be extracted from filenames, such as:
19
+
20
+ - `2019-05-30-welcome.md`
21
+ - `2019-05-30-welcome/index.md`
22
+
23
+ A blog post folder can be convenient to co-locate blog post images:
24
+
25
+ ![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)
26
+
27
+ The blog supports tags as well!
28
+
29
+ **And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config.
@@ -0,0 +1,25 @@
1
+ yangshun:
2
+ name: Yangshun Tay
3
+ title: Ex-Meta Staff Engineer, Co-founder GreatFrontEnd
4
+ url: https://linkedin.com/in/yangshun
5
+ image_url: https://github.com/yangshun.png
6
+ page: true
7
+ socials:
8
+ x: yangshunz
9
+ linkedin: yangshun
10
+ github: yangshun
11
+ newsletter: https://www.greatfrontend.com
12
+
13
+ slorber:
14
+ name: Sébastien Lorber
15
+ title: Docusaurus maintainer
16
+ url: https://sebastienlorber.com
17
+ image_url: https://github.com/slorber.png
18
+ page:
19
+ # customize the url of the author page at /blog/authors/<permalink>
20
+ permalink: '/all-sebastien-lorber-articles'
21
+ socials:
22
+ x: sebastienlorber
23
+ linkedin: sebastienlorber
24
+ github: slorber
25
+ newsletter: https://thisweekinreact.com
@@ -0,0 +1,19 @@
1
+ facebook:
2
+ label: Facebook
3
+ permalink: /facebook
4
+ description: Facebook tag description
5
+
6
+ hello:
7
+ label: Hello
8
+ permalink: /hello
9
+ description: Hello tag description
10
+
11
+ docusaurus:
12
+ label: Docusaurus
13
+ permalink: /docusaurus
14
+ description: Docusaurus tag description
15
+
16
+ hola:
17
+ label: Hola
18
+ permalink: /hola
19
+ description: Hola tag description