@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/MCP_CONFIG.md ADDED
@@ -0,0 +1,505 @@
1
+ # MCP Configuration Guide for CSV Editor
2
+
3
+ > **📦 Installation Note**: Install via `pip install git+https://github.com/santoshray02/csv-editor.git` (not available on PyPI due to naming conflicts). See [ALTERNATIVE_PUBLISHING.md](ALTERNATIVE_PUBLISHING.md) for details.
4
+
5
+ This guide provides configuration examples for integrating the CSV Editor MCP server with various AI assistant platforms.
6
+
7
+ ## Table of Contents
8
+ - [Claude Desktop](#claude-desktop)
9
+ - [Continue (VS Code)](#continue-vs-code)
10
+ - [Cline](#cline)
11
+ - [Windsurf](#windsurf)
12
+ - [Zed Editor](#zed-editor)
13
+ - [Generic MCP Client](#generic-mcp-client)
14
+ - [Environment Variables](#environment-variables)
15
+ - [Troubleshooting](#troubleshooting)
16
+
17
+ ## Claude Desktop
18
+
19
+ ### macOS Configuration
20
+ Location: `~/Library/Application Support/Claude/claude_desktop_config.json`
21
+
22
+ ```json
23
+ {
24
+ "mcpServers": {
25
+ "csv-editor": {
26
+ "command": "uv",
27
+ "args": [
28
+ "tool",
29
+ "run",
30
+ "csv-editor"
31
+ ],
32
+ "env": {
33
+ "CSV_MAX_FILE_SIZE": "1024",
34
+ "CSV_SESSION_TIMEOUT": "60",
35
+ "CSV_MAX_SESSIONS": "10"
36
+ }
37
+ }
38
+ }
39
+ }
40
+ ```
41
+
42
+ ### Windows Configuration
43
+ Location: `%APPDATA%\Claude\claude_desktop_config.json`
44
+
45
+ ```json
46
+ {
47
+ "mcpServers": {
48
+ "csv-editor": {
49
+ "command": "uv",
50
+ "args": [
51
+ "tool",
52
+ "run",
53
+ "csv-editor"
54
+ ],
55
+ "env": {
56
+ "CSV_MAX_FILE_SIZE": "1024",
57
+ "CSV_SESSION_TIMEOUT": "60",
58
+ "CSV_MAX_SESSIONS": "10"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### Linux Configuration
66
+ Location: `~/.config/Claude/claude_desktop_config.json`
67
+
68
+ ```json
69
+ {
70
+ "mcpServers": {
71
+ "csv-editor": {
72
+ "command": "uv",
73
+ "args": [
74
+ "tool",
75
+ "run",
76
+ "csv-editor"
77
+ ],
78
+ "env": {
79
+ "CSV_MAX_FILE_SIZE": "1024",
80
+ "CSV_SESSION_TIMEOUT": "60",
81
+ "CSV_MAX_SESSIONS": "10"
82
+ }
83
+ }
84
+ }
85
+ }
86
+ ```
87
+
88
+ ### Using Python Directly (Alternative)
89
+ If you prefer using Python directly instead of uv:
90
+
91
+ ```json
92
+ {
93
+ "mcpServers": {
94
+ "csv-editor": {
95
+ "command": "python",
96
+ "args": [
97
+ "-m",
98
+ "csv_editor.server"
99
+ ],
100
+ "env": {
101
+ "PYTHONPATH": "/path/to/csv-editor/src",
102
+ "CSV_MAX_FILE_SIZE": "1024",
103
+ "CSV_SESSION_TIMEOUT": "60"
104
+ }
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ ## Continue (VS Code)
111
+
112
+ ### Configuration
113
+ Location: `~/.continue/config.json`
114
+
115
+ ```json
116
+ {
117
+ "models": [
118
+ {
119
+ "title": "Claude 3.5 Sonnet",
120
+ "provider": "anthropic",
121
+ "model": "claude-3-5-sonnet-20241022",
122
+ "apiKey": "YOUR_API_KEY"
123
+ }
124
+ ],
125
+ "mcpServers": {
126
+ "csv-editor": {
127
+ "command": "uv",
128
+ "args": [
129
+ "tool",
130
+ "run",
131
+ "csv-editor"
132
+ ],
133
+ "cwd": "/path/to/csv-editor",
134
+ "env": {
135
+ "CSV_MAX_FILE_SIZE": "1024",
136
+ "CSV_SESSION_TIMEOUT": "60",
137
+ "CSV_MAX_SESSIONS": "10"
138
+ }
139
+ }
140
+ },
141
+ "customCommands": [
142
+ {
143
+ "name": "csv-analyze",
144
+ "prompt": "Use the CSV Editor MCP server to analyze the selected CSV file",
145
+ "description": "Analyze CSV data"
146
+ },
147
+ {
148
+ "name": "csv-clean",
149
+ "prompt": "Use the CSV Editor MCP server to clean and validate the CSV data",
150
+ "description": "Clean CSV data"
151
+ }
152
+ ]
153
+ }
154
+ ```
155
+
156
+ ## Cline
157
+
158
+ ### Configuration
159
+ Location: VS Code Settings (`.vscode/settings.json` or global settings)
160
+
161
+ ```json
162
+ {
163
+ "cline.mcpServers": {
164
+ "csv-editor": {
165
+ "command": "uv",
166
+ "args": [
167
+ "tool",
168
+ "run",
169
+ "csv-editor"
170
+ ],
171
+ "cwd": "/path/to/csv-editor",
172
+ "env": {
173
+ "CSV_MAX_FILE_SIZE": "1024",
174
+ "CSV_SESSION_TIMEOUT": "60",
175
+ "CSV_MAX_SESSIONS": "10",
176
+ "CSV_LOG_LEVEL": "INFO"
177
+ }
178
+ }
179
+ },
180
+ "cline.customInstructions": "When working with CSV files, use the csv-editor MCP server for data operations, analysis, and transformations."
181
+ }
182
+ ```
183
+
184
+ ### Alternative: Cline Config File
185
+ Location: `~/.cline/config.json`
186
+
187
+ ```json
188
+ {
189
+ "mcpServers": [
190
+ {
191
+ "name": "csv-editor",
192
+ "command": "uv",
193
+ "args": ["tool", "run", "csv-editor"],
194
+ "cwd": "/path/to/csv-editor",
195
+ "enabled": true,
196
+ "alwaysAllow": [
197
+ "load_csv",
198
+ "get_statistics",
199
+ "export_csv"
200
+ ],
201
+ "env": {
202
+ "CSV_MAX_FILE_SIZE": "1024",
203
+ "CSV_SESSION_TIMEOUT": "60"
204
+ }
205
+ }
206
+ ]
207
+ }
208
+ ```
209
+
210
+ ## Windsurf
211
+
212
+ ### Configuration
213
+ Location: `~/.windsurf/config.json` (or in VS Code settings if using Windsurf extension)
214
+
215
+ ```json
216
+ {
217
+ "mcp": {
218
+ "servers": [
219
+ {
220
+ "name": "csv-editor",
221
+ "command": "uv",
222
+ "args": ["tool", "run", "csv-editor"],
223
+ "cwd": "/path/to/csv-editor",
224
+ "env": {
225
+ "CSV_MAX_FILE_SIZE": "1024",
226
+ "CSV_SESSION_TIMEOUT": "60",
227
+ "CSV_MAX_SESSIONS": "10"
228
+ },
229
+ "capabilities": {
230
+ "tools": true,
231
+ "resources": true,
232
+ "prompts": true
233
+ }
234
+ }
235
+ ]
236
+ }
237
+ }
238
+ ```
239
+
240
+ ### Alternative: Windsurf VS Code Extension Settings
241
+ If using Windsurf as a VS Code extension, add to `.vscode/settings.json`:
242
+
243
+ ```json
244
+ {
245
+ "windsurf.mcpServers": {
246
+ "csv-editor": {
247
+ "command": "uv",
248
+ "args": ["tool", "run", "csv-editor"],
249
+ "cwd": "/path/to/csv-editor",
250
+ "env": {
251
+ "CSV_MAX_FILE_SIZE": "1024",
252
+ "CSV_SESSION_TIMEOUT": "60"
253
+ },
254
+ "autoStart": true,
255
+ "restartOnFailure": true
256
+ }
257
+ },
258
+ "windsurf.enableMcp": true
259
+ }
260
+ ```
261
+
262
+ ## Zed Editor
263
+
264
+ ### Configuration
265
+ Location: `~/.config/zed/settings.json`
266
+
267
+ ```json
268
+ {
269
+ "assistant": {
270
+ "default_model": {
271
+ "provider": "anthropic",
272
+ "model": "claude-3-5-sonnet-20241022"
273
+ },
274
+ "mcp": {
275
+ "servers": {
276
+ "csv-editor": {
277
+ "command": "uv",
278
+ "args": [
279
+ "tool",
280
+ "run",
281
+ "csv-editor"
282
+ ],
283
+ "cwd": "/path/to/csv-editor",
284
+ "env": {
285
+ "CSV_MAX_FILE_SIZE": "1024",
286
+ "CSV_SESSION_TIMEOUT": "60",
287
+ "CSV_MAX_SESSIONS": "10"
288
+ }
289
+ }
290
+ }
291
+ }
292
+ },
293
+ "language_models": {
294
+ "anthropic": {
295
+ "api_key": "YOUR_API_KEY"
296
+ }
297
+ }
298
+ }
299
+ ```
300
+
301
+ ## Generic MCP Client
302
+
303
+ ### Using FastMCP Client Library
304
+
305
+ ```python
306
+ from fastmcp import Client
307
+
308
+ config = {
309
+ "mcpServers": {
310
+ "csv-editor": {
311
+ "command": "uv",
312
+ "args": ["tool", "run", "csv-editor"],
313
+ "cwd": "/path/to/csv-editor",
314
+ "env": {
315
+ "CSV_MAX_FILE_SIZE": "1024",
316
+ "CSV_SESSION_TIMEOUT": "60"
317
+ }
318
+ }
319
+ }
320
+ }
321
+
322
+ # Initialize client
323
+ client = Client(config)
324
+
325
+ async def use_csv_editor():
326
+ async with client:
327
+ # Load a CSV file
328
+ result = await client.call_tool(
329
+ "csv-editor_load_csv",
330
+ {
331
+ "file_path": "/path/to/data.csv",
332
+ "encoding": "utf-8"
333
+ }
334
+ )
335
+
336
+ session_id = result["session_id"]
337
+
338
+ # Get statistics
339
+ stats = await client.call_tool(
340
+ "csv-editor_get_statistics",
341
+ {"session_id": session_id}
342
+ )
343
+
344
+ print(stats)
345
+ ```
346
+
347
+ ### Using MCP SDK Directly
348
+
349
+ ```python
350
+ import mcp
351
+ from mcp.client import ClientSession
352
+ from mcp.client.stdio import StdioServerParameters, stdio_client
353
+
354
+ async def run_csv_editor():
355
+ server_params = StdioServerParameters(
356
+ command="uv",
357
+ args=["tool", "run", "csv-editor"],
358
+ cwd="/path/to/csv-editor",
359
+ env={
360
+ "CSV_MAX_FILE_SIZE": "1024",
361
+ "CSV_SESSION_TIMEOUT": "60"
362
+ }
363
+ )
364
+
365
+ async with stdio_client(server_params) as (read, write):
366
+ async with ClientSession(read, write) as session:
367
+ # Initialize connection
368
+ await session.initialize()
369
+
370
+ # List available tools
371
+ tools = await session.list_tools()
372
+ print("Available tools:", tools)
373
+
374
+ # Call a tool
375
+ result = await session.call_tool(
376
+ "load_csv",
377
+ arguments={
378
+ "file_path": "/path/to/data.csv"
379
+ }
380
+ )
381
+ print("Result:", result)
382
+ ```
383
+
384
+ ## Environment Variables
385
+
386
+ All configurations support the following environment variables:
387
+
388
+ | Variable | Default | Description |
389
+ |----------|---------|-------------|
390
+ | `CSV_MAX_FILE_SIZE` | `1024` | Maximum file size in MB |
391
+ | `CSV_SESSION_TIMEOUT` | `60` | Session timeout in minutes |
392
+ | `CSV_MAX_SESSIONS` | `10` | Maximum concurrent sessions |
393
+ | `CSV_LOG_LEVEL` | `INFO` | Logging level (DEBUG, INFO, WARNING, ERROR) |
394
+ | `CSV_TEMP_DIR` | System temp | Directory for temporary files |
395
+ | `CSV_ENABLE_PROFILING` | `false` | Enable performance profiling |
396
+ | `CSV_CACHE_SIZE` | `100` | Maximum cache size in MB |
397
+
398
+ ## Installation Methods
399
+
400
+ ### Method 1: Using uv (Recommended)
401
+ ```bash
402
+ # Install uv if not already installed
403
+ curl -LsSf https://astral.sh/uv/install.sh | sh
404
+
405
+ # Clone and install
406
+ git clone https://github.com/santoshray02/csv-editor.git
407
+ cd csv-editor
408
+ uv pip install -e .
409
+ ```
410
+
411
+ ### Method 2: Using pip
412
+ ```bash
413
+ # Clone and install
414
+ git clone https://github.com/santoshray02/csv-editor.git
415
+ cd csv-editor
416
+ pip install -e .
417
+ ```
418
+
419
+ ### Method 3: Using pipx (Global Installation)
420
+ ```bash
421
+ pipx install git+https://github.com/santoshray02/csv-editor.git
422
+ ```
423
+
424
+ ## Verification
425
+
426
+ After configuration, verify the server is working:
427
+
428
+ ### 1. Test Direct Execution
429
+ ```bash
430
+ # Using uv
431
+ uv tool run csv-editor --help
432
+
433
+ # Or using Python
434
+ python -m csv_editor.server --help
435
+ ```
436
+
437
+ ### 2. Test with MCP Inspector
438
+ ```bash
439
+ # Install MCP Inspector
440
+ npm install -g @modelcontextprotocol/inspector
441
+
442
+ # Run inspector
443
+ mcp-inspector uv tool run csv-editor
444
+ ```
445
+
446
+ ### 3. Check in Your Client
447
+ - **Claude Desktop**: Look for "csv-editor" in the MCP servers list
448
+ - **Continue**: Check the "MCP" tab in the Continue panel
449
+ - **Cline**: Verify in the Cline settings or status bar
450
+ - **Windsurf**: Check the Windsurf panel or status bar for MCP connection
451
+ - **Zed**: Check the assistant panel for available tools
452
+
453
+ ## Troubleshooting
454
+
455
+ ### Common Issues
456
+
457
+ 1. **Server not starting**
458
+ - Check the command path is correct
459
+ - Verify Python/uv is in PATH
460
+ - Check file permissions
461
+
462
+ 2. **Tools not appearing**
463
+ - Restart the client application
464
+ - Check the configuration file syntax
465
+ - Review client application logs
466
+
467
+ 3. **Session timeout issues**
468
+ - Increase `CSV_SESSION_TIMEOUT` value
469
+ - Check system resources
470
+
471
+ 4. **File size limitations**
472
+ - Adjust `CSV_MAX_FILE_SIZE` environment variable
473
+ - Consider chunking large files
474
+
475
+ ### Debug Mode
476
+
477
+ Enable debug logging by setting:
478
+ ```json
479
+ {
480
+ "env": {
481
+ "CSV_LOG_LEVEL": "DEBUG"
482
+ }
483
+ }
484
+ ```
485
+
486
+ ### Log Locations
487
+
488
+ - **Claude Desktop**: `~/Library/Logs/Claude/` (macOS), `%APPDATA%\Claude\logs\` (Windows)
489
+ - **Continue**: VS Code Output panel → Continue
490
+ - **Cline**: VS Code Output panel → Cline
491
+ - **Windsurf**: `~/.windsurf/logs/` or VS Code Output panel → Windsurf
492
+ - **Zed**: `~/.local/state/zed/logs/` (Linux/macOS)
493
+
494
+ ## Security Considerations
495
+
496
+ 1. **File Access**: The server has access to the file system. Configure appropriate permissions.
497
+ 2. **Network Access**: URL loading is enabled. Consider firewall rules if needed.
498
+ 3. **Resource Limits**: Set appropriate limits via environment variables.
499
+ 4. **Sensitive Data**: Be cautious when processing files containing sensitive information.
500
+
501
+ ## Support
502
+
503
+ For issues or questions:
504
+ - GitHub Issues: https://github.com/santoshray02/csv-editor/issues
505
+ - Documentation: https://github.com/santoshray02/csv-editor#readme
package/PUBLISHING.md ADDED
@@ -0,0 +1,210 @@
1
+ # Publishing Guide for CSV Editor
2
+
3
+ This guide covers publishing your CSV Editor package to PyPI and other repositories for maximum visibility.
4
+
5
+ ## 🎯 Publishing Strategy
6
+
7
+ ### 1. PyPI (Python Package Index) - Primary
8
+ - **Main distribution channel** for Python packages
9
+ - **Easy installation** via `pip install csv-editor`
10
+ - **Automatic dependency management**
11
+
12
+ ### 2. GitHub Packages
13
+ - **Backup distribution** and enterprise use
14
+ - **Integration** with GitHub ecosystem
15
+
16
+ ### 3. Conda-Forge (Future)
17
+ - **Scientific Python community**
18
+ - **Conda package manager**
19
+
20
+ ## 🚀 Quick Start Publishing
21
+
22
+ ### Prerequisites
23
+ ```bash
24
+ # Install publishing tools (using uv)
25
+ uv add --dev twine
26
+
27
+ # Create PyPI account at https://pypi.org/account/register/
28
+ # Create API token at https://pypi.org/manage/account/token/
29
+ ```
30
+
31
+ ### Method 1: Automated Publishing (Recommended)
32
+
33
+ 1. **Push to GitHub** and create a release:
34
+ ```bash
35
+ git add .
36
+ git commit -m "Prepare v1.0.0 release"
37
+ git push origin main
38
+ git tag v1.0.0
39
+ git push origin v1.0.0
40
+ ```
41
+
42
+ 2. **Create GitHub Release**:
43
+ - Go to https://github.com/santoshray02/csv-editor/releases
44
+ - Click "Create a new release"
45
+ - Tag: `v1.0.0`
46
+ - Title: `CSV Editor v1.0.0`
47
+ - Description: Copy from CHANGELOG.md
48
+ - Publish release
49
+
50
+ 3. **Automatic publishing** via GitHub Actions will handle the rest!
51
+
52
+ ### Method 2: Manual Publishing
53
+
54
+ 1. **Build and test**:
55
+ ```bash
56
+ uv run python scripts/publish.py
57
+ ```
58
+
59
+ 2. **Test publish** (optional):
60
+ ```bash
61
+ uv run twine upload --repository testpypi dist/*
62
+ ```
63
+
64
+ 3. **Publish to PyPI**:
65
+ ```bash
66
+ uv run twine upload dist/*
67
+ ```
68
+
69
+ ## 📋 Pre-Publishing Checklist
70
+
71
+ - [ ] Version number updated in `pyproject.toml`
72
+ - [ ] CHANGELOG.md updated with new version
73
+ - [ ] All tests passing
74
+ - [ ] Documentation updated
75
+ - [ ] README.md has clear installation instructions
76
+ - [ ] License file present
77
+ - [ ] GitHub repository is public
78
+ - [ ] PyPI account created and API token configured
79
+
80
+ ## 🔧 PyPI Configuration
81
+
82
+ ### 1. Create `.pypirc` file:
83
+ ```ini
84
+ [distutils]
85
+ index-servers = pypi testpypi
86
+
87
+ [pypi]
88
+ username = __token__
89
+ password = pypi-your-api-token-here
90
+
91
+ [testpypi]
92
+ repository = https://test.pypi.org/legacy/
93
+ username = __token__
94
+ password = pypi-your-test-api-token-here
95
+ ```
96
+
97
+ ### 2. Or use environment variables:
98
+ ```bash
99
+ export TWINE_USERNAME=__token__
100
+ export TWINE_PASSWORD=pypi-your-api-token-here
101
+ ```
102
+
103
+ ## 🌟 Promotion Strategy
104
+
105
+ ### 1. Python Community
106
+ - **Reddit**: r/Python, r/MachineLearning, r/datascience
107
+ - **Hacker News**: Submit to Show HN
108
+ - **Python Weekly**: Submit for newsletter inclusion
109
+ - **Real Python**: Consider guest article
110
+
111
+ ### 2. MCP Community
112
+ - **Model Context Protocol Discord**
113
+ - **Anthropic Community Forums**
114
+ - **FastMCP GitHub discussions**
115
+
116
+ ### 3. Data Science Community
117
+ - **Kaggle**: Share in datasets/discussions
118
+ - **Data Science subreddits**
119
+ - **Pandas community**
120
+ - **Jupyter community**
121
+
122
+ ### 4. Developer Platforms
123
+ - **Product Hunt**: Launch your package
124
+ - **Dev.to**: Write tutorial articles
125
+ - **Medium**: Technical deep-dive articles
126
+ - **YouTube**: Create demo videos
127
+
128
+ ### 5. Social Media
129
+ - **Twitter/X**: Use hashtags #Python #DataScience #MCP #OpenSource
130
+ - **LinkedIn**: Professional network posts
131
+ - **Mastodon**: Python and tech communities
132
+
133
+ ## 📊 Package Analytics
134
+
135
+ ### Track your package performance:
136
+ - **PyPI Stats**: https://pypistats.org/packages/csv-editor
137
+ - **GitHub Insights**: Repository analytics
138
+ - **Download counts**: Monitor adoption
139
+
140
+ ### Key metrics to watch:
141
+ - Daily/monthly downloads
142
+ - GitHub stars and forks
143
+ - Issues and discussions
144
+ - Community contributions
145
+
146
+ ## 🔄 Maintenance
147
+
148
+ ### Regular updates:
149
+ 1. **Security updates**: Keep dependencies current
150
+ 2. **Bug fixes**: Address user issues promptly
151
+ 3. **Feature releases**: Based on community feedback
152
+ 4. **Documentation**: Keep examples and guides updated
153
+
154
+ ### Version management:
155
+ - **Patch releases** (1.0.1): Bug fixes
156
+ - **Minor releases** (1.1.0): New features
157
+ - **Major releases** (2.0.0): Breaking changes
158
+
159
+ ## 📈 Success Metrics
160
+
161
+ ### Short-term goals (1-3 months):
162
+ - [ ] 100+ PyPI downloads
163
+ - [ ] 50+ GitHub stars
164
+ - [ ] 5+ community issues/discussions
165
+ - [ ] Featured in at least one newsletter/blog
166
+
167
+ ### Medium-term goals (3-6 months):
168
+ - [ ] 1000+ PyPI downloads
169
+ - [ ] 100+ GitHub stars
170
+ - [ ] 10+ contributors
171
+ - [ ] Conda-forge package
172
+ - [ ] Documentation website
173
+
174
+ ### Long-term goals (6+ months):
175
+ - [ ] 10,000+ PyPI downloads
176
+ - [ ] 500+ GitHub stars
177
+ - [ ] Active community
178
+ - [ ] Integration with major AI platforms
179
+ - [ ] Conference talks/presentations
180
+
181
+ ## 🆘 Troubleshooting
182
+
183
+ ### Common issues:
184
+ 1. **Upload failed**: Check API token and package name availability
185
+ 2. **Build errors**: Ensure all dependencies in pyproject.toml
186
+ 3. **Import errors**: Check package structure and __init__.py files
187
+ 4. **Version conflicts**: Ensure version is higher than existing
188
+
189
+ ### Getting help:
190
+ - **PyPI Support**: https://pypi.org/help/
191
+ - **GitHub Issues**: Create issues for package-specific problems
192
+ - **Python Packaging Guide**: https://packaging.python.org/
193
+
194
+ ## 🎉 Post-Publishing
195
+
196
+ After successful publishing:
197
+
198
+ 1. **Update README** with installation instructions
199
+ 2. **Create announcement** on social media
200
+ 3. **Submit to package directories**:
201
+ - Awesome Python lists
202
+ - Python Package Index alternatives
203
+ - Curated package collections
204
+
205
+ 4. **Engage with community**:
206
+ - Respond to issues promptly
207
+ - Welcome contributions
208
+ - Maintain active development
209
+
210
+ Good luck with your package launch! 🚀