onetool-mcp 1.0.0b1__py3-none-any.whl → 1.0.0rc2__py3-none-any.whl

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 (81) hide show
  1. onetool/cli.py +63 -4
  2. onetool_mcp-1.0.0rc2.dist-info/METADATA +266 -0
  3. onetool_mcp-1.0.0rc2.dist-info/RECORD +129 -0
  4. {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/licenses/LICENSE.txt +1 -1
  5. {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/licenses/NOTICE.txt +54 -64
  6. ot/__main__.py +6 -6
  7. ot/config/__init__.py +48 -46
  8. ot/config/global_templates/__init__.py +2 -2
  9. ot/config/{defaults → global_templates}/diagram-templates/api-flow.mmd +33 -33
  10. ot/config/{defaults → global_templates}/diagram-templates/c4-context.puml +30 -30
  11. ot/config/{defaults → global_templates}/diagram-templates/class-diagram.mmd +87 -87
  12. ot/config/{defaults → global_templates}/diagram-templates/feature-mindmap.mmd +70 -70
  13. ot/config/{defaults → global_templates}/diagram-templates/microservices.d2 +81 -81
  14. ot/config/{defaults → global_templates}/diagram-templates/project-gantt.mmd +37 -37
  15. ot/config/{defaults → global_templates}/diagram-templates/state-machine.mmd +42 -42
  16. ot/config/global_templates/diagram.yaml +167 -0
  17. ot/config/global_templates/onetool.yaml +3 -1
  18. ot/config/{defaults → global_templates}/prompts.yaml +102 -97
  19. ot/config/global_templates/security.yaml +31 -0
  20. ot/config/global_templates/servers.yaml +93 -12
  21. ot/config/global_templates/snippets.yaml +5 -26
  22. ot/config/{defaults → global_templates}/tool_templates/__init__.py +7 -7
  23. ot/config/loader.py +221 -105
  24. ot/config/mcp.py +5 -1
  25. ot/config/secrets.py +192 -190
  26. ot/decorators.py +116 -116
  27. ot/executor/__init__.py +35 -35
  28. ot/executor/base.py +16 -16
  29. ot/executor/fence_processor.py +83 -83
  30. ot/executor/linter.py +142 -142
  31. ot/executor/pep723.py +288 -288
  32. ot/executor/runner.py +20 -6
  33. ot/executor/simple.py +163 -163
  34. ot/executor/validator.py +603 -164
  35. ot/http_client.py +145 -145
  36. ot/logging/__init__.py +37 -37
  37. ot/logging/entry.py +213 -213
  38. ot/logging/format.py +191 -188
  39. ot/logging/span.py +349 -349
  40. ot/meta.py +236 -14
  41. ot/paths.py +32 -49
  42. ot/prompts.py +218 -218
  43. ot/proxy/manager.py +14 -2
  44. ot/registry/__init__.py +189 -189
  45. ot/registry/parser.py +269 -269
  46. ot/server.py +330 -315
  47. ot/shortcuts/__init__.py +15 -15
  48. ot/shortcuts/aliases.py +87 -87
  49. ot/shortcuts/snippets.py +258 -258
  50. ot/stats/__init__.py +35 -35
  51. ot/stats/html.py +2 -2
  52. ot/stats/reader.py +354 -354
  53. ot/stats/timing.py +57 -57
  54. ot/support.py +63 -63
  55. ot/tools.py +1 -1
  56. ot/utils/batch.py +161 -161
  57. ot/utils/cache.py +120 -120
  58. ot/utils/exceptions.py +23 -23
  59. ot/utils/factory.py +178 -179
  60. ot/utils/format.py +65 -65
  61. ot/utils/http.py +202 -202
  62. ot/utils/platform.py +45 -45
  63. ot/utils/truncate.py +69 -69
  64. ot_tools/__init__.py +4 -4
  65. ot_tools/_convert/__init__.py +12 -12
  66. ot_tools/_convert/pdf.py +254 -254
  67. ot_tools/diagram.yaml +167 -167
  68. ot_tools/scaffold.py +2 -2
  69. ot_tools/transform.py +124 -19
  70. ot_tools/web_fetch.py +94 -43
  71. onetool_mcp-1.0.0b1.dist-info/METADATA +0 -163
  72. onetool_mcp-1.0.0b1.dist-info/RECORD +0 -132
  73. ot/config/defaults/bench.yaml +0 -4
  74. ot/config/defaults/onetool.yaml +0 -25
  75. ot/config/defaults/servers.yaml +0 -7
  76. ot/config/defaults/snippets.yaml +0 -4
  77. ot_tools/firecrawl.py +0 -732
  78. {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/WHEEL +0 -0
  79. {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/entry_points.txt +0 -0
  80. /ot/config/{defaults → global_templates}/tool_templates/extension.py +0 -0
  81. /ot/config/{defaults → global_templates}/tool_templates/isolated.py +0 -0
onetool/cli.py CHANGED
@@ -5,10 +5,70 @@ from __future__ import annotations
5
5
  import atexit
6
6
  import os
7
7
  import signal
8
+ import sys
8
9
  from pathlib import Path
10
+ from typing import TYPE_CHECKING
9
11
 
10
12
  import typer
11
13
 
14
+ if TYPE_CHECKING:
15
+ from rich.console import Console
16
+
17
+
18
+ def _is_initialized() -> bool:
19
+ """Check if OneTool is initialized (global config exists).
20
+
21
+ Returns:
22
+ True if ~/.onetool/config/onetool.yaml exists
23
+ """
24
+ from ot.paths import CONFIG_SUBDIR, get_global_dir
25
+
26
+ global_config = get_global_dir() / CONFIG_SUBDIR / "onetool.yaml"
27
+ return global_config.exists()
28
+
29
+
30
+ def _check_first_run(console: Console) -> None:
31
+ """Check for first-run state and prompt for initialization.
32
+
33
+ If OneTool is not initialized:
34
+ - Interactive (TTY): Prompt user to initialize, then exit
35
+ - Non-interactive: Print error and exit
36
+
37
+ After first-run init, exits so user can review config before starting server.
38
+
39
+ Args:
40
+ console: Rich console for output
41
+
42
+ Raises:
43
+ typer.Exit: Always exits if not initialized (after init or on decline)
44
+ """
45
+ if _is_initialized():
46
+ return
47
+
48
+ # Check if stdin is a TTY (interactive mode)
49
+ is_interactive = sys.stdin.isatty()
50
+
51
+ if not is_interactive:
52
+ console.print("[red]OneTool not initialized.[/red] Run: onetool init")
53
+ raise typer.Exit(1)
54
+
55
+ # Interactive mode - prompt for initialization
56
+ console.print("[yellow]OneTool is not initialized.[/yellow]")
57
+ do_init = typer.confirm("Initialize now?", default=True)
58
+
59
+ if not do_init:
60
+ console.print("Run 'onetool init' when ready.")
61
+ raise typer.Exit(1)
62
+
63
+ # Initialize
64
+ from ot.paths import ensure_global_dir
65
+
66
+ ensure_global_dir(quiet=False, force=False)
67
+
68
+ # Exit after first-run init so user can configure their MCP client
69
+ console.print("\n[green]OneTool initialized. Configure your MCP client to run OneTool.[/green]")
70
+ raise typer.Exit(0)
71
+
12
72
 
13
73
  def _suppress_shutdown_warnings() -> None:
14
74
  """Suppress pymupdf SWIG warnings at exit.
@@ -355,10 +415,9 @@ def serve(
355
415
  onetool
356
416
  onetool --config config/onetool.yaml
357
417
  """
358
- # Bootstrap global config directory on first run
359
- from ot.paths import ensure_global_dir
360
-
361
- ensure_global_dir(quiet=True)
418
+ # Check for first-run initialization (skip for 'init' subcommand)
419
+ if ctx.invoked_subcommand != "init":
420
+ _check_first_run(console)
362
421
 
363
422
  # Only run if no subcommand was invoked (handles --help automatically)
364
423
  if ctx.invoked_subcommand is not None:
@@ -0,0 +1,266 @@
1
+ Metadata-Version: 2.4
2
+ Name: onetool-mcp
3
+ Version: 1.0.0rc2
4
+ Summary: 🧿 One MCP, unlimited tools.
5
+ Project-URL: Homepage, https://github.com/beycom/onetool
6
+ Project-URL: Repository, https://github.com/beycom/onetool
7
+ Project-URL: Documentation, https://onetool.beycom.online
8
+ Project-URL: Issues, https://github.com/beycom/onetool/issues
9
+ Author-email: Gavin Las <beycom99@gmail.com>
10
+ License: GPL-3.0
11
+ License-File: LICENSE.txt
12
+ License-File: NOTICE.txt
13
+ Keywords: agents,code-execution,context-rot,llm,mcp,mcp-server,model-context-protocol,token-efficiency,tools
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Classifier: Typing :: Typed
22
+ Requires-Python: >=3.12
23
+ Requires-Dist: aiofiles>=25.1.0
24
+ Requires-Dist: docstring-parser>=0.17
25
+ Requires-Dist: duckdb>=1.4.3
26
+ Requires-Dist: fastmcp>=2.14.4
27
+ Requires-Dist: google-genai>=1.60.0
28
+ Requires-Dist: httpx>=0.28.1
29
+ Requires-Dist: jinja2>=3.1.6
30
+ Requires-Dist: loguru>=0.7.3
31
+ Requires-Dist: mcp>=1.26.0
32
+ Requires-Dist: openai>=2.15.0
33
+ Requires-Dist: openpyxl>=3.1.5
34
+ Requires-Dist: pillow>=12.1.0
35
+ Requires-Dist: pydantic-settings>=2.12.0
36
+ Requires-Dist: pydantic>=2.12.5
37
+ Requires-Dist: pymupdf>=1.26.7
38
+ Requires-Dist: python-docx>=1.2.0
39
+ Requires-Dist: python-pptx>=1.0.2
40
+ Requires-Dist: pyyaml>=6.0.3
41
+ Requires-Dist: questionary>=2.1.1
42
+ Requires-Dist: rich>=14.3.1
43
+ Requires-Dist: sqlalchemy>=2.0.46
44
+ Requires-Dist: trafilatura>=2.0.0
45
+ Requires-Dist: typer>=0.21.1
46
+ Provides-Extra: file
47
+ Requires-Dist: send2trash>=2.1.0; extra == 'file'
48
+ Description-Content-Type: text/markdown
49
+
50
+ <!-- mcp-name: io.github.beycom/onetool-mcp -->
51
+
52
+ <p align="center">
53
+ <img src="https://raw.githubusercontent.com/beycom/onetool-mcp/main/docs/assets/logo.svg" alt="OneTool" width="80">
54
+ </p>
55
+
56
+ <p align="center">
57
+ <strong>🧿 One MCP, unlimited tools</strong>
58
+ </p>
59
+
60
+ <p align="center">
61
+ <a href="https://pypi.org/project/onetool-mcp/"><img alt="PyPI" src="https://img.shields.io/pypi/v/onetool-mcp"></a>
62
+ <a href="https://github.com/beycom/onetool-mcp/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/badge/license-GPLv3-blue"></a>
63
+ <a href="https://www.python.org/"><img alt="Python" src="https://img.shields.io/badge/python-3.11%2B-blue"></a>
64
+ <a href="https://github.com/beycom/onetool-mcp/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/beycom/onetool-mcp"></a>
65
+ </p>
66
+
67
+ <p align="center">
68
+ Works with Claude Code · Cursor · Windsurf · Any MCP client
69
+ </p>
70
+
71
+ ---
72
+
73
+ ## The Problem
74
+
75
+ Each MCP server consumes **3K-30K tokens per request**. Connect 5 servers and you've burned 55K tokens before the conversation starts. Connect 10+ and you're at 100K tokens.
76
+
77
+ The math is brutal: Claude Opus 4.5 at $5/M input tokens, 20 days × 10 conversations × 10 messages × 3K tokens = **$30/month per MCP server** - even if you never use the tools.
78
+
79
+ And then there's **context rot** - your AI literally gets dumber as you add more tools ([Chroma Research, 2025](https://research.trychroma.com/context-rot)).
80
+
81
+ ## The Solution
82
+
83
+ OneTool is **one MCP server** that exposes tools as a Python API. Instead of reading tool definitions, your agent writes code:
84
+
85
+ ```python
86
+ __ot brave.search(query="react docs 2026")
87
+ ```
88
+
89
+ Configure one MCP server. Use unlimited tools.
90
+
91
+ > "Agents scale better by writing code to call tools instead. This reduces the token usage from 150,000 tokens to 2,000 tokens...a cost saving of 98.7%"
92
+ >
93
+ > — [Anthropic Engineering](https://www.anthropic.com/engineering/code-execution-with-mcp)
94
+
95
+ **96% fewer tokens. 24× lower cost. No context rot.**
96
+
97
+ [📖 Read the full story](https://onetool.beycom.online/about/about-onetool/)
98
+
99
+ ---
100
+
101
+ ## See It In Action
102
+
103
+ | Demo | Description |
104
+ | ---- | ----------- |
105
+ | [Compare the Search](https://youtu.be/Dv-_dtHVU_A) | Side-by-side token comparison |
106
+ | [Build a Wikipedia Tool](https://youtu.be/AZz03Yw0s1E) | Create a custom tool in seconds |
107
+
108
+ ---
109
+
110
+ ## Install
111
+
112
+ Requires [uv](https://docs.astral.sh/uv/):
113
+
114
+ ```bash
115
+ uv tool install onetool-mcp
116
+ onetool init
117
+ ```
118
+
119
+ Add to Claude Code:
120
+
121
+ ```bash
122
+ claude mcp add onetool onetool
123
+ ```
124
+
125
+ Or manually add to `~/.claude/mcp.json`:
126
+
127
+ ```json
128
+ {
129
+ "mcpServers": {
130
+ "onetool": {
131
+ "command": "onetool"
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ That's it. All 100+ tools work out of the box.
138
+
139
+ Verify: `onetool init validate`
140
+
141
+ [📖 Full installation guide](https://onetool.beycom.online/learn/installation/)
142
+
143
+ ---
144
+
145
+ ## Features
146
+
147
+ | Feature | Description |
148
+ | ----------------------- | ------------------------------------------------------ |
149
+ | **96% Token Savings** | ~2K tokens no matter how many tools you add |
150
+ | **100+ Built-in Tools** | Web search, databases, file ops, diagrams, conversions |
151
+ | **Explicit Execution** | See exactly what runs - `__ot brave.search(q="AI")` |
152
+ | **MCP Server Proxy** | Wrap existing MCP servers without the tool tax |
153
+ | **Scaffold Tools** | Build new tools as part of the conversation |
154
+ | **Smart Tools** | Delegate to cheaper LLMs (10× savings) |
155
+ | **Single YAML Config** | Global and project scopes, per-pack settings |
156
+ | **Security Layers** | AST validation, path boundaries, output sanitisation |
157
+
158
+ ---
159
+
160
+ ## Tools
161
+
162
+ 15 packs, 100+ tools ready to use:
163
+
164
+ | Pack | Tools | Description |
165
+ | ----------- | --------------------------------------- | ---------------------- |
166
+ | `brave` | `search`, `news` | Web and news search |
167
+ | `code` | `search`, `search_batch`, `status` | Semantic code search |
168
+ | `context7` | `resolve`, `get_docs` | Library documentation |
169
+ | `convert` | `pdf_to_md`, `docx_to_md`, `pptx_to_md` | Document conversion |
170
+ | `db` | `query`, `schema`, `tables` | Database operations |
171
+ | `diagram` | `create` | Mermaid diagrams |
172
+ | `excel` | `read`, `write`, `query` | Excel files |
173
+ | `file` | `read`, `write`, `list`, `search` | File operations |
174
+ | `ground` | `search` | Google Grounding |
175
+ | `llm` | `transform`, `transform_file` | LLM-powered transforms |
176
+ | `ot` | `help`, `tools`, `stats` | Introspection |
177
+ | `package` | `npm`, `pypi`, `cargo` | Package versions |
178
+ | `ripgrep` | `search`, `count` | Fast code search |
179
+ | `scaffold` | `tool` | Generate new tools |
180
+ | `web` | `fetch`, `fetch_batch` | Web fetching |
181
+
182
+ [📖 Complete tools reference](https://onetool.beycom.online/reference/tools/) — full summary table with all 100+ tools
183
+
184
+ ---
185
+
186
+ ## MCP Server Proxy
187
+
188
+ Wrap any existing MCP server and call it explicitly - without the tool tax:
189
+
190
+ ```yaml
191
+ # .onetool/onetool.yaml
192
+ mcp_servers:
193
+ chrome-devtools:
194
+ command: npx
195
+ args: ["-y", "@anthropic-ai/chrome-devtools-mcp@latest"]
196
+ github:
197
+ command: npx
198
+ args: ["-y", "@anthropic-ai/github-mcp-server@latest"]
199
+ ```
200
+
201
+ ```python
202
+ __ot mcp.call(server="github", tool="get_file_contents", arguments={"path": "README.md"})
203
+ ```
204
+
205
+ [📖 Configuration guide](https://onetool.beycom.online/learn/configuration/#external-mcp-servers)
206
+
207
+ ---
208
+
209
+ ## Extending
210
+
211
+ Drop a Python file, get a pack. No registration, no config:
212
+
213
+ ```python
214
+ # .onetool/tools/wiki.py
215
+ pack = "wiki"
216
+
217
+ def summary(*, title: str) -> str:
218
+ """Get Wikipedia article summary."""
219
+ import httpx
220
+ url = f"https://en.wikipedia.org/api/rest_v1/page/summary/{title}"
221
+ return httpx.get(url).json().get("extract", "Not found")
222
+ ```
223
+
224
+ ```python
225
+ __ot wiki.summary(title="Python_(programming_language)")
226
+ ```
227
+
228
+ [📖 Creating tools guide](https://onetool.beycom.online/learn/extending/extension-tools/)
229
+
230
+ ---
231
+
232
+ ## Documentation
233
+
234
+ - [Quickstart](https://onetool.beycom.online/learn/quickstart/) - 30 seconds to first tool call
235
+ - [Installation](https://onetool.beycom.online/learn/installation/) - All platforms
236
+ - [Configuration](https://onetool.beycom.online/learn/configuration/) - YAML schema
237
+ - [Tools Reference](https://onetool.beycom.online/reference/tools/) - All 100+ tools
238
+ - [Security](https://onetool.beycom.online/learn/security/) - Security layers
239
+ - [Extending](https://onetool.beycom.online/learn/extending/) - Build your own
240
+
241
+ ---
242
+
243
+ ## References
244
+
245
+ - [Code Execution with MCP](https://www.anthropic.com/engineering/code-execution-with-mcp) - Anthropic Engineering
246
+ - [Context Rot](https://research.trychroma.com/context-rot) - Chroma Research
247
+
248
+ ---
249
+
250
+ ## Contributing
251
+
252
+ [Contribution guidelines](https://github.com/beycom/onetool-mcp/blob/main/CONTRIBUTING.md)
253
+
254
+ ---
255
+
256
+ ## License
257
+
258
+ **GPLv3** - Will transition to **MIT** at v2.0.
259
+
260
+ ---
261
+
262
+ ## Support
263
+
264
+ If you find OneTool useful:
265
+
266
+ [![Ko-fi](https://img.shields.io/badge/Ko--fi-Buy%20me%20a%20coffee-ff5e5b?logo=ko-fi)](https://ko-fi.com/beycom)
@@ -0,0 +1,129 @@
1
+ bench/__init__.py,sha256=y388vnV0atWMmhJA4RzbIGGHrWNifzidcXkIgjSQR2Q,133
2
+ bench/cli.py,sha256=8QjzxnTkMFvJ-c_bQ0YZkr-MtN9sdZDau_Vo62DFSTQ,1664
3
+ bench/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ bench/reporter.py,sha256=peV3xaDiasQR5UAMCC1oRDuOWG_IAMC6HqQ8XjdXgC8,23602
5
+ bench/run.py,sha256=9s1z_Q4vEE5rdct9aKOpo2A6JLLl8vD0bwQ-jAWB2Ec,16456
6
+ bench/secrets.py,sha256=ho1susoPnJbmdhhMubhdCueQnybMm2ykBapR_nkpTZ0,2676
7
+ bench/utils.py,sha256=Kr3ZHb9cBFaM1HRNBFCUH3JKHk4-fNAiBpr2I95eR0c,386
8
+ bench/harness/__init__.py,sha256=e9qbt4m_7I6j1wlLd_HCI2kQSXNs_vdluFpOLULD25A,1511
9
+ bench/harness/client.py,sha256=qBW1Y49QFEt-NElybRKu1bA1YbuXKv2cPYr58hCSLjw,25303
10
+ bench/harness/config.py,sha256=k6jqvQeumS91ka_QBV8pXtpwQUZhgutbbNiL5n68gxI,12581
11
+ bench/harness/csv_writer.py,sha256=iwy3ixo9KlzoXmJVAYTHYt2Nm8s5vQsxVAaykgsvHEY,3305
12
+ bench/harness/evaluate.py,sha256=Mv6I63aBXwEZHoarUOYu3UIG3-rRcInLtBULlqcqeDk,17262
13
+ bench/harness/metrics.py,sha256=5Zy0x3IG-CeXUk-nxGm8-w2YCds1B2oxNGQMKNkgjGE,9690
14
+ bench/harness/runner.py,sha256=Gx9_IXVBhmogaWCf5e-YNuuyDNeJVJpSPKtbp7PyxaI,38332
15
+ onetool/__init__.py,sha256=NH91OBFDKBASlyorvmrLjckwXblgcToPkdqtZOIya7o,110
16
+ onetool/cli.py,sha256=-U0JaImHaXGs-BRPV39AO3wdPD4BJKts46LFNO_lUZ8,13953
17
+ onetool/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ ot/__init__.py,sha256=WI1BaMpZr1Xag5DLy8710K19v4EEiU0plLsgbCWWgz0,983
19
+ ot/__main__.py,sha256=7H47GZ-tb1Ih8MoYHnaNPjYPxsOXXnVL983IrTxOFPo,129
20
+ ot/_cli.py,sha256=cJ6mazEkl1cseHTUmtPFrsJfjZZ5IFkfFqh0c5s7xuY,2700
21
+ ot/_tui.py,sha256=fbF_iwK58EBPhxWmEEQozneHlSRr7MRop7aRugVQ688,1437
22
+ ot/decorators.py,sha256=gPNDtQSiVxa7HDzqeYJJnqb_fKhgTDREnspNo1s0zr4,3339
23
+ ot/http_client.py,sha256=1BuRWHxTSmRleXGFvZzs4nzCv9GV7HKOZ0YSRVh1_JE,4308
24
+ ot/meta.py,sha256=UNmYoN8SRkztTDv9RZe_CmO_ZLirc4gJZSUO56jziI8,59152
25
+ ot/paths.py,sha256=6yqPKdQ8zXLcQ9Txbr-pf41IfZuMpBJZNjN-Eet6H54,14221
26
+ ot/prompts.py,sha256=1U0NFCvbIffN74RL4k-4N8jIj8C_Usy2BwtE6mIRYCA,6884
27
+ ot/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ ot/server.py,sha256=uBp1ZG9czCTz5IymZz5MfXNMChSQJ38JXhjhiMYjsn4,10531
29
+ ot/support.py,sha256=CqrsJCzVVoHnY0uis6_YtqVJLOG8llzjvoyzIUAn8Ms,1702
30
+ ot/tools.py,sha256=V-Qb34WmfWYqxIKp_aGcuXn06-IM_PNOQspfC1-dcUM,3590
31
+ ot/config/__init__.py,sha256=THimK2ZlWrrImAri9OsybJNBNsdWk9kdigbYqHVONR4,1154
32
+ ot/config/dynamic.py,sha256=alaJUnDL2KRIWeCNN-garmPmJ3qFoOirkwh0hSFcMuc,3711
33
+ ot/config/loader.py,sha256=iGY8EVPhrrHEpLUAMLUH7STYf2288XoZedUdXheiZhY,38891
34
+ ot/config/mcp.py,sha256=72bQwJdl-7xLYLePQ1C5YLqXLewTdZkARQQDHIO9fKY,5248
35
+ ot/config/secrets.py,sha256=Ue53Wx80yVFSgne-JZw7eVvQExKC1Kylr9JJNona5xY,6299
36
+ ot/config/tool_config.py,sha256=BisTtEj9Ws8NnWxvSbW9kskkygO8F-RO4Mgm9KIuPm0,3651
37
+ ot/config/global_templates/__init__.py,sha256=4hYQjxPiEe02VmpvWXVfgJgbSwg89euX9mG182oa58M,111
38
+ ot/config/global_templates/bench-secrets-template.yaml,sha256=srZcnOM8Af2gQTpmo7g16sE9-zj0Tlguv54V-WE3hCs,224
39
+ ot/config/global_templates/bench.yaml,sha256=h2Ac5-unilwx5TPvDsp02y4I0WiPI7y9CyRh7FIBuL8,223
40
+ ot/config/global_templates/diagram.yaml,sha256=dgQvlL7upiXSubzgBhhNa26HNGGk-_nyhnz2prE--2I,5656
41
+ ot/config/global_templates/onetool.yaml,sha256=YpIBBGJ3ctLd25_R_pHsuPpRq-iUroKfq3s99-EgQJk,951
42
+ ot/config/global_templates/prompts.yaml,sha256=69y6FbEWhCoi-1uLUZwt5nMu3DPsduOl_i5hnAD8hGU,4881
43
+ ot/config/global_templates/secrets-template.yaml,sha256=sUb2uExdrx_07bH2UVKtp-tqCSpcW-PenH_UFDxPF2k,1541
44
+ ot/config/global_templates/security.yaml,sha256=s4QWXgKjsEgFSEzXIEv57bv9gwO1SCzTwiv8D20gdFs,1242
45
+ ot/config/global_templates/servers.yaml,sha256=N0PAYvmyrPJYrY7lKGL34NUPlIoFvpS5IY1vTGlUfTA,4904
46
+ ot/config/global_templates/snippets.yaml,sha256=PLjc_4KLRWNR_DPFB0MF_LisKCEvdc5XvvnEHUd3Aio,8920
47
+ ot/config/global_templates/diagram-templates/api-flow.mmd,sha256=PoSScSsKRxb91GyuK-slko1NWs9yAKllPuYTvaVNgnk,729
48
+ ot/config/global_templates/diagram-templates/c4-context.puml,sha256=oBDkVujije3ZIrxcmv4xt5OCtwcpW2QAkbWwRIBbOPQ,946
49
+ ot/config/global_templates/diagram-templates/class-diagram.mmd,sha256=7VwccmraqC_mXscnVPkhInsVZDPVaUJkNfVYBhLSf3E,1804
50
+ ot/config/global_templates/diagram-templates/feature-mindmap.mmd,sha256=U_mz4DJG6_8mweZ0bY29Tr6G5JKM-hwrPn57sBGyhmw,1427
51
+ ot/config/global_templates/diagram-templates/microservices.d2,sha256=oEdaXsvogdx5UvSypivlT5DCLHC6xJxBl6Y6t7zX_ww,1529
52
+ ot/config/global_templates/diagram-templates/project-gantt.mmd,sha256=x7q5noj9boYfJQjDC5WCfIMcqGbJPi61Na7_B7ViBrM,1314
53
+ ot/config/global_templates/diagram-templates/state-machine.mmd,sha256=90KpOWo7TKJVinqATzcDGIKm4xOgFTmiXUbDoiHbLJ0,1013
54
+ ot/config/global_templates/tool_templates/__init__.py,sha256=nNdHPxZvBeUfRJfMvhVvrXE6rJ4Q1NxhvSk1NfJQIsg,221
55
+ ot/config/global_templates/tool_templates/extension.py,sha256=VfHxAjiIZ2BdbFMWEkdxGZT4OUxSAUb9ng9p-HH2lCM,1371
56
+ ot/config/global_templates/tool_templates/isolated.py,sha256=aTl7_hG1ALHCGqyHMPjKa6fNBXoTBPjsLtbFgq76LAg,1556
57
+ ot/executor/__init__.py,sha256=0qA-CZ2uTfe0Mqso1yLb1zdOlGWJKby4Qn4Ucb4zpgg,871
58
+ ot/executor/base.py,sha256=YzjXzRKdR2VtGaBuekIopPIydjribkxUKNDyvPH_d4s,333
59
+ ot/executor/fence_processor.py,sha256=9vrSUOWYlTGxgjieXi5FkGJdXOSl4e68zTtQCClVRjo,2827
60
+ ot/executor/linter.py,sha256=YMdC8Aa_aY0VevFexuSiJtSBzRGwlZba2CFM4DjCJKw,3846
61
+ ot/executor/pack_proxy.py,sha256=S0d3VsHaXvoraoJdgySAkk4Jc_ExzjGkPbKeCDstUEc,8793
62
+ ot/executor/param_resolver.py,sha256=lQR73bB_aJ1zgXGiI_JmzOiCeUYnW-jiEPHRdquSY00,4361
63
+ ot/executor/pep723.py,sha256=TWX9rphcf7LtR6GFRpN-j5BrteUUsCjg5UNoy-UH6w0,8762
64
+ ot/executor/result_store.py,sha256=BwTd4Gk0JPVmysGB0bC1vtc3M-5q4ZMsfkBle7e-jRE,11104
65
+ ot/executor/runner.py,sha256=Wbroj0AE0YKPnWeNyJyJAnjRZttv1-w3Z9n9C5th2o4,17100
66
+ ot/executor/simple.py,sha256=_RfFlHy0-AnOFvUoYuLqxuD94SiG2IXSvmfQBLQzpYo,5192
67
+ ot/executor/tool_loader.py,sha256=vdu5pAL1NvGGu1H7tE3lqBafzWHWP3MfFXMZgzgFyIw,13377
68
+ ot/executor/validator.py,sha256=nMMcobn6-wHoJjahVnV9e8qi9nKJNOquBBpeNpYP5Js,30927
69
+ ot/executor/worker_pool.py,sha256=HJOu3P9E5MKgBZsddmeElctPUhF5kwx5Hfd9IezwJo8,12635
70
+ ot/executor/worker_proxy.py,sha256=NUxOI2VZFkNbH5IMulvokHEe5cZQtViOSpb4DEHBf4I,5651
71
+ ot/logging/__init__.py,sha256=s4nAEAxqpiRY6bdRNyEwIj-3n0WkaYktN_ACtS8mqK8,980
72
+ ot/logging/config.py,sha256=PwvQDzcfrcDiUBJhRLyCc07GaMHzn9hu6rFq5wFQCyo,9919
73
+ ot/logging/entry.py,sha256=f6B6A8xOdbdvTzU7TeYgexlphNHtRxH4VGM0JfEfImI,6382
74
+ ot/logging/format.py,sha256=6MpyfaSZzhwqv0AQRIPTmCnrivqdC7hbIUlZ1A7N6_U,5681
75
+ ot/logging/span.py,sha256=3R-hJJAQPXPmFwofWgcQN2qNiQFhq7HuhfNIqllsV0M,11722
76
+ ot/proxy/__init__.py,sha256=N4shk9gsZ76BBe8tUftXL83ELB42zlbTXtF05lTUqUc,435
77
+ ot/proxy/manager.py,sha256=PBk45E-t3QAqFE-mBEyA74DEKfBr_9ixlC36lC2V1HQ,14060
78
+ ot/registry/__init__.py,sha256=tlglqdUKsXlclUqyQp8ekZjeRzKRKmEfofDmiH3W7eg,5338
79
+ ot/registry/models.py,sha256=Z-lsRRN3pDyL2nUalZA9QoD1IG_e7aSPUoE6TvRspCk,2160
80
+ ot/registry/parser.py,sha256=OpRXT47aKQNk-TxzWq9WLep2RPICvUDCvLKDeO4Z464,8685
81
+ ot/registry/registry.py,sha256=HFPPIGWop2szXRQeQeFs5axK4iS17dEOHV8qf9Jm5nE,13458
82
+ ot/shortcuts/__init__.py,sha256=xkwnHUwFjmJsdUpqRcccaYHic72XooV7-Pic2sbdlzU,476
83
+ ot/shortcuts/aliases.py,sha256=qQrlrdKDioQphUwHBGUk1JqgiLo4zpZx63llvZ_xztw,2792
84
+ ot/shortcuts/snippets.py,sha256=RqfweQpmV95A5_QHs1voHCtiS5U3PSLzOrC7QjTQsh4,8214
85
+ ot/stats/__init__.py,sha256=ukbetHbilGHnlFJUZ8xiO_pis1aLk8xMKr9wdzKhOi4,968
86
+ ot/stats/html.py,sha256=MkVai3sIDRl2X3p4qlaUgugosU3wDFWbQfHjRpVBE98,9101
87
+ ot/stats/jsonl_writer.py,sha256=ym-Wfy0gv90M59ipCQsxapTKNQBO28btKDe6kgFdxck,8169
88
+ ot/stats/reader.py,sha256=0Bkry6cKVO85yU0BM5ro7LCkdo7rzG3gwkBqu8yHX0I,12237
89
+ ot/stats/timing.py,sha256=Vg-Tyv96oMshlAgoRoAz3A4-GVV2S3zNkO9oeDKKsjg,1557
90
+ ot/utils/__init__.py,sha256=k54kcSGmKl8zrnKXw9svCyXej7FrVZvshMSK1f_6de4,2108
91
+ ot/utils/batch.py,sha256=0J5p2m8W7crSgad2X0jVA5Hx9I_dWdDGG4TM-41teRc,5100
92
+ ot/utils/cache.py,sha256=awG4Hb6ySgoyEpVRoh2dGmYmJa1BRXCupVDkNqF9kqQ,3626
93
+ ot/utils/deps.py,sha256=5U_bnAEfd_Ivt9ZZitn9emt8T7Ehm99_xb1_okbURfA,11654
94
+ ot/utils/exceptions.py,sha256=1m34Qt0AMR53PAmWmqKPKsVQsVC53U-lfEvEYuidO4s,636
95
+ ot/utils/factory.py,sha256=_hb71m7MZzRv9hIU0bbKUZ8yZQwculTvBj7ook_2t7Y,5133
96
+ ot/utils/format.py,sha256=zu1yUIihtyYiI5wHIL1ofn38HTSqBIbK27Ytziv6-D0,2130
97
+ ot/utils/http.py,sha256=tKAiXR_tGsO3_CVfL0-0G7Za2C5EN1PzAzMexLKEOVY,5855
98
+ ot/utils/platform.py,sha256=X2ickI8VTQbEpF32hjuoAgvOpkViFYMUn2H267XiAt0,1557
99
+ ot/utils/sanitize.py,sha256=5zDKpDwE6oo-74Bwv-yhovOJ6zk03vO2-gsCiEDA2kk,3815
100
+ ot/utils/truncate.py,sha256=yB-rZ5cmWSNSi1Em1P4-wXQxaWm29CE6vJWR8ZDqnVc,1840
101
+ ot_tools/__init__.py,sha256=TGqcr_t07e1v6wGd9K0PNkrQrlR4RMrbzg0-RU0B0IU,99
102
+ ot_tools/brave_search.py,sha256=JPVR_S2J1NLL7ad4AudIkgMsvnqggibjZ5FRXPt5ZA0,17746
103
+ ot_tools/code_search.py,sha256=P3-oReY7n_3nrlEiYzFv5ompcU-cuVRTeEK4fSQKuew,25191
104
+ ot_tools/context7.py,sha256=sn75QMEeOeSQSYZeVwT4UjYEXo3QXa8KC61mwIUix3U,16088
105
+ ot_tools/convert.py,sha256=mCmDFLWgLiEJhYyd6Ex9s7qfyPOWj7FKaqtIFKG_Ig4,20488
106
+ ot_tools/db.py,sha256=RH_OOUJYqYVw14O8QYGB9QKg9IGNPQAM33HDa71D3v4,13142
107
+ ot_tools/diagram.py,sha256=tGNyd3PYdpi3Qs7Gs8pbcZVWMBVmyNbJG_wxiZ8682M,50478
108
+ ot_tools/diagram.yaml,sha256=QeEpp8zyYCvMh7h-yhR14HERs7E-rOa1yptf8TihdTg,5638
109
+ ot_tools/excel.py,sha256=yZGgKzDzPvZAE7b9vjC25FY7lJkw7PCBFMYOGcU1UyE,43067
110
+ ot_tools/file.py,sha256=9o_A1m7GCxpnIKIwAiahvGaQrfxXcfkVQicPH1_ztW0,46689
111
+ ot_tools/grounding_search.py,sha256=ak0wZzBQMPR5VYVrATOIzldZj_n8UxYeCxrmpTZrykA,20182
112
+ ot_tools/package.py,sha256=5MtsPW9ieolQAnaw60Yb4TyODSlowW56HAZj-j_QSkU,19148
113
+ ot_tools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ ot_tools/ripgrep.py,sha256=_dKHo5TTlYlzoRQV8-7kFw3yuYk7I5r_9FYJvnGFECc,17105
115
+ ot_tools/scaffold.py,sha256=wgg3mZO15EKDuGMVE_QULUy0ISN9eCkilWL_xOuAWzQ,17378
116
+ ot_tools/transform.py,sha256=BD819IvbsFpd6gFW2mC8K-0X7-7qVYKsdqr8NEyx00w,10410
117
+ ot_tools/web_fetch.py,sha256=PtW_ynZNmE4o8JxiiqrmJ_Z0meTx2T6lvoJU2PwZCuQ,15459
118
+ ot_tools/_convert/__init__.py,sha256=D-QyOzXZvFBOicxpOX43OW4HlZhboswrgNYEmXEGiIw,477
119
+ ot_tools/_convert/excel.py,sha256=mVCgolocTKd7ZCpVd2hANaYnhJrneNtGYEZafrCeYqE,8679
120
+ ot_tools/_convert/pdf.py,sha256=BAZJh-6fWQFyuVSPeN22FwWf56SH2AlOTpwuqnnZrPk,7577
121
+ ot_tools/_convert/powerpoint.py,sha256=M8lwkTV7x4wafR7eXrVojCBKgcXVxO1tT-Z2Ml5wwxo,7855
122
+ ot_tools/_convert/utils.py,sha256=AfId8ulTx_kKq0zVbhvuY3KGXqQjEk8Y7o8BXjP8WgA,10192
123
+ ot_tools/_convert/word.py,sha256=XfjqQRhEYS_433LprmF6vqyosytXVdNWzsCXo42WNcA,8710
124
+ onetool_mcp-1.0.0rc2.dist-info/METADATA,sha256=lFEQ4EK2NsXPKzrJBmlOdQ8aHz08oiy7YpPc7cvl_y0,9255
125
+ onetool_mcp-1.0.0rc2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
126
+ onetool_mcp-1.0.0rc2.dist-info/entry_points.txt,sha256=UUr3FvhGxnRdyJSxRG5YeqCGUi8nQ3oMCoueM35sF04,66
127
+ onetool_mcp-1.0.0rc2.dist-info/licenses/LICENSE.txt,sha256=eenW0GFt38rIpO3MguA49tq9bcAJR2NWECenWW3JoAs,35561
128
+ onetool_mcp-1.0.0rc2.dist-info/licenses/NOTICE.txt,sha256=X-5KsBMpZYEDvljq9_0Rr1wJ18pzm52ftcgeruy-5tE,2096
129
+ onetool_mcp-1.0.0rc2.dist-info/RECORD,,
@@ -676,7 +676,7 @@ Public License instead of this License. But first, please read
676
676
  --------------------------------------------------------------------------------
677
677
 
678
678
  OneTool
679
- Copyright 2024-present, OneTool Authors
679
+ Copyright 2024-present, Gavin Lasnitzki
680
680
  Licensed under the GNU General Public License v3.0.
681
681
 
682
682
  Third-Party Credits:
@@ -1,64 +1,54 @@
1
- OneTool
2
- Copyright 2024-present, OneTool Authors
3
-
4
- This product includes software developed by third parties.
5
-
6
- ================================================================================
7
- trafilatura
8
- ================================================================================
9
- Copyright 2019-present, Adrien Barbaresi and contributors
10
- Licensed under the Apache License, Version 2.0
11
- https://github.com/adbar/trafilatura
12
-
13
- Used in: tools/web_fetch.py
14
-
15
- ================================================================================
16
- brave-search-mcp-server
17
- ================================================================================
18
- Copyright (c) 2024 Anthropic, PBC
19
- Copyright (c) 2025 Brave Software, Inc
20
- Licensed under the MIT License
21
- https://github.com/brave/brave-search-mcp-server
22
-
23
- Used in: tools/brave_search.py (API integration patterns)
24
-
25
- ================================================================================
26
- context7
27
- ================================================================================
28
- Copyright (c) 2021 Upstash, Inc.
29
- Licensed under the MIT License
30
- https://github.com/upstash/context7
31
-
32
- Used in: tools/context7.py (API integration patterns)
33
-
34
- ================================================================================
35
- ChunkHound
36
- ================================================================================
37
- Copyright (c) 2025 Ofri Wolfus
38
- Licensed under the MIT License
39
- https://github.com/chunkhound/chunkhound
40
-
41
- Used in: tools/code_search.py (LanceDB schema and indexing patterns)
42
-
43
- ================================================================================
44
- mcp-alchemy
45
- ================================================================================
46
- Copyright (c) 2024 Rune Kaagaard
47
- Licensed under the Mozilla Public License, v. 2.0
48
- https://github.com/runekaagaard/mcp-alchemy
49
-
50
- Used in: ot_tools/db.py (database introspection and query patterns)
51
-
52
- ================================================================================
53
- firecrawl
54
- ================================================================================
55
- Copyright (c) 2024 Mendable.ai
56
- Licensed under the AGPL-3.0 License (SDK and server)
57
- https://github.com/firecrawl/firecrawl
58
-
59
- Used in: ot_tools/firecrawl.py (API client SDK)
60
- Note: We use the SDK to call Firecrawl's cloud API. No server code is distributed.
61
-
62
- ================================================================================
63
-
64
- Full license texts are available in the licenses/ directory.
1
+ OneTool
2
+ Copyright 2024-present, OneTool Authors
3
+
4
+ This product includes software developed by third parties.
5
+
6
+ ================================================================================
7
+ trafilatura
8
+ ================================================================================
9
+ Copyright 2019-present, Adrien Barbaresi and contributors
10
+ Licensed under the Apache License, Version 2.0
11
+ https://github.com/adbar/trafilatura
12
+
13
+ Used in: tools/web_fetch.py
14
+
15
+ ================================================================================
16
+ brave-search-mcp-server
17
+ ================================================================================
18
+ Copyright (c) 2024 Anthropic, PBC
19
+ Copyright (c) 2025 Brave Software, Inc
20
+ Licensed under the MIT License
21
+ https://github.com/brave/brave-search-mcp-server
22
+
23
+ Used in: tools/brave_search.py (API integration patterns)
24
+
25
+ ================================================================================
26
+ context7
27
+ ================================================================================
28
+ Copyright (c) 2021 Upstash, Inc.
29
+ Licensed under the MIT License
30
+ https://github.com/upstash/context7
31
+
32
+ Used in: tools/context7.py (API integration patterns)
33
+
34
+ ================================================================================
35
+ ChunkHound
36
+ ================================================================================
37
+ Copyright (c) 2025 Ofri Wolfus
38
+ Licensed under the MIT License
39
+ https://github.com/chunkhound/chunkhound
40
+
41
+ Used in: tools/code_search.py (LanceDB schema and indexing patterns)
42
+
43
+ ================================================================================
44
+ mcp-alchemy
45
+ ================================================================================
46
+ Copyright (c) 2024 Rune Kaagaard
47
+ Licensed under the Mozilla Public License, v. 2.0
48
+ https://github.com/runekaagaard/mcp-alchemy
49
+
50
+ Used in: ot_tools/db.py (database introspection and query patterns)
51
+
52
+ ================================================================================
53
+
54
+ Full license texts are available in the licenses/ directory.
ot/__main__.py CHANGED
@@ -1,6 +1,6 @@
1
- """Run OneTool MCP server when executed as a module."""
2
-
3
- from ot.server import main
4
-
5
- if __name__ == "__main__":
6
- main()
1
+ """Run OneTool MCP server when executed as a module."""
2
+
3
+ from ot.server import main
4
+
5
+ if __name__ == "__main__":
6
+ main()