first-agentic-csa 0.2.0__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 (37) hide show
  1. first_agentic_csa-0.2.0.dist-info/METADATA +409 -0
  2. first_agentic_csa-0.2.0.dist-info/RECORD +37 -0
  3. first_agentic_csa-0.2.0.dist-info/WHEEL +4 -0
  4. first_agentic_csa-0.2.0.dist-info/entry_points.txt +2 -0
  5. first_agentic_csa-0.2.0.dist-info/licenses/LICENSE +28 -0
  6. wpilib_mcp/__init__.py +7 -0
  7. wpilib_mcp/plugin_loader.py +278 -0
  8. wpilib_mcp/plugins/__init__.py +9 -0
  9. wpilib_mcp/plugins/base.py +269 -0
  10. wpilib_mcp/plugins/ctre/__init__.py +9 -0
  11. wpilib_mcp/plugins/ctre/build_index.py +205 -0
  12. wpilib_mcp/plugins/ctre/data/index.json +735 -0
  13. wpilib_mcp/plugins/ctre/plugin.py +256 -0
  14. wpilib_mcp/plugins/photonvision/__init__.py +6 -0
  15. wpilib_mcp/plugins/photonvision/build_index.py +262 -0
  16. wpilib_mcp/plugins/photonvision/data/index.json +639 -0
  17. wpilib_mcp/plugins/photonvision/plugin.py +251 -0
  18. wpilib_mcp/plugins/redux/__init__.py +9 -0
  19. wpilib_mcp/plugins/redux/build_index.py +180 -0
  20. wpilib_mcp/plugins/redux/data/index.json +231 -0
  21. wpilib_mcp/plugins/redux/plugin.py +255 -0
  22. wpilib_mcp/plugins/rev/__init__.py +9 -0
  23. wpilib_mcp/plugins/rev/build_index.py +193 -0
  24. wpilib_mcp/plugins/rev/data/index.json +527 -0
  25. wpilib_mcp/plugins/rev/plugin.py +255 -0
  26. wpilib_mcp/plugins/wpilib/__init__.py +9 -0
  27. wpilib_mcp/plugins/wpilib/build_index.py +211 -0
  28. wpilib_mcp/plugins/wpilib/data/index_2025.json +171 -0
  29. wpilib_mcp/plugins/wpilib/data/index_stable.json +2143 -0
  30. wpilib_mcp/plugins/wpilib/plugin.py +281 -0
  31. wpilib_mcp/server.py +326 -0
  32. wpilib_mcp/tool_router.py +318 -0
  33. wpilib_mcp/utils/__init__.py +9 -0
  34. wpilib_mcp/utils/fetch.py +155 -0
  35. wpilib_mcp/utils/html.py +257 -0
  36. wpilib_mcp/utils/indexer.py +333 -0
  37. wpilib_mcp/utils/search.py +207 -0
@@ -0,0 +1,409 @@
1
+ Metadata-Version: 2.4
2
+ Name: first-agentic-csa
3
+ Version: 0.2.0
4
+ Summary: Plugin-based FRC documentation agent as an MCP server for WPILib and vendor libraries
5
+ Author: Rami Mouro
6
+ License: BSD-3-Clause
7
+ License-File: LICENSE
8
+ Keywords: csa,documentation,first,frc,mcp,robotics,wpilib
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: BSD License
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Requires-Python: >=3.11
15
+ Requires-Dist: beautifulsoup4>=4.12.0
16
+ Requires-Dist: httpx>=0.27.0
17
+ Requires-Dist: lxml>=5.0.0
18
+ Requires-Dist: mcp>=1.0.0
19
+ Requires-Dist: rank-bm25>=0.2.2
20
+ Provides-Extra: dev
21
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
22
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
23
+ Description-Content-Type: text/markdown
24
+
25
+ # FIRST Agentic CSA
26
+
27
+ A plugin-based FRC documentation agent implemented as a Model Context Protocol (MCP) server. Search across WPILib and vendor documentation (REV, CTRE, Redux, PhotonVision) using natural language queries. Built for FIRST Robotics Competition teams and CSAs (Control System Advisors).
28
+
29
+ ## Features
30
+
31
+ - **Unified Search**: Query WPILib + vendor docs with a single tool
32
+ - **Plugin Architecture**: Extensible system for adding new documentation sources
33
+ - **BM25 Ranking**: High-quality text search without embedding costs
34
+ - **Multi-Vendor Support**: WPILib, REV Robotics, CTRE Phoenix, Redux Robotics, PhotonVision
35
+ - **Language Filtering**: Filter results by Java, Python, or C++
36
+ - **Version Support**: Search specific documentation versions (2024, 2025, etc.)
37
+
38
+ ## Installation
39
+
40
+ ### Quick Install (PyPI)
41
+
42
+ ```bash
43
+ # Using uvx (recommended)
44
+ uvx first-agentic-csa
45
+
46
+ # Or with pip
47
+ pip install first-agentic-csa
48
+ ```
49
+
50
+ ### From Source
51
+
52
+ If you want to modify or contribute to the project:
53
+
54
+ 1. **Install uv** (fast Python package manager):
55
+
56
+ **Windows (PowerShell):**
57
+ ```powershell
58
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
59
+ ```
60
+
61
+ **macOS/Linux:**
62
+ ```bash
63
+ curl -LsSf https://astral.sh/uv/install.sh | sh
64
+ ```
65
+
66
+ 2. **Clone and install:**
67
+ ```bash
68
+ git clone https://github.com/YOUR_USERNAME/first-agentic-csa.git
69
+ cd first-agentic-csa
70
+ uv sync
71
+ ```
72
+
73
+ ## Quick Start
74
+
75
+ ### Running the Server
76
+
77
+ ```bash
78
+ # With uv
79
+ uv run first-agentic-csa
80
+
81
+ # Or directly
82
+ python -m wpilib_mcp.server
83
+ ```
84
+
85
+ ### Configure in Claude Desktop / Cursor
86
+
87
+ Add to your MCP configuration (`claude_desktop_config.json` or Cursor settings):
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "frc-docs": {
93
+ "command": "uvx",
94
+ "args": ["first-agentic-csa"]
95
+ }
96
+ }
97
+ }
98
+ ```
99
+
100
+ If running from source:
101
+ ```json
102
+ {
103
+ "mcpServers": {
104
+ "frc-docs": {
105
+ "command": "uv",
106
+ "args": ["--directory", "/path/to/first-agentic-csa", "run", "first-agentic-csa"]
107
+ }
108
+ }
109
+ }
110
+ ```
111
+
112
+ ### Configure in Other MCP Clients
113
+
114
+ The server uses stdio transport and is compatible with any MCP client.
115
+
116
+ ## Available Tools
117
+
118
+ ### `search_frc_docs`
119
+
120
+ Search FRC documentation across WPILib and vendor libraries.
121
+
122
+ ```
123
+ query: "SparkMax configure"
124
+ vendors: ["all"] | ["wpilib", "rev", "ctre", "redux"]
125
+ version: "2025"
126
+ language: "Java" | "Python" | "C++"
127
+ max_results: 1-25
128
+ ```
129
+
130
+ ### `fetch_frc_doc_page`
131
+
132
+ Fetch the full content of a documentation page by URL.
133
+
134
+ ```
135
+ url: "https://docs.wpilib.org/en/stable/docs/software/commandbased/commands.html"
136
+ ```
137
+
138
+ ### `list_frc_doc_sections`
139
+
140
+ List available documentation sections from vendors.
141
+
142
+ ```
143
+ vendors: ["all"] | ["wpilib", "rev"]
144
+ version: "2025"
145
+ language: "Java"
146
+ ```
147
+
148
+ ## Configuration
149
+
150
+ Edit `config.json` to customize plugin settings:
151
+
152
+ ```json
153
+ {
154
+ "plugins": {
155
+ "wpilib": {
156
+ "enabled": true,
157
+ "versions": ["2025"],
158
+ "languages": ["Java", "Python", "C++"]
159
+ },
160
+ "rev": {
161
+ "enabled": true,
162
+ "languages": ["Java", "C++"]
163
+ },
164
+ "ctre": {
165
+ "enabled": false
166
+ }
167
+ },
168
+ "cache": {
169
+ "ttl_seconds": 3600
170
+ },
171
+ "search": {
172
+ "default_max_results": 10,
173
+ "default_language": "Java"
174
+ }
175
+ }
176
+ ```
177
+
178
+ ## Supported Plugins
179
+
180
+ | Plugin | Vendor | Documentation |
181
+ |--------|--------|---------------|
182
+ | `wpilib` | WPILib | docs.wpilib.org |
183
+ | `rev` | REV Robotics | docs.revrobotics.com |
184
+ | `ctre` | CTRE Phoenix | v6.docs.ctr-electronics.com |
185
+ | `redux` | Redux Robotics | docs.reduxrobotics.com |
186
+ | `photonvision` | PhotonVision | docs.photonvision.org |
187
+
188
+ ## Building Documentation Indexes
189
+
190
+ Each plugin has its own index builder that vendors can maintain independently.
191
+
192
+ ### Using the convenience wrapper:
193
+
194
+ ```bash
195
+ # Build all plugin indexes
196
+ python scripts/build_index.py all
197
+
198
+ # Build specific vendor
199
+ python scripts/build_index.py wpilib --version 2025
200
+ python scripts/build_index.py rev
201
+ python scripts/build_index.py ctre
202
+ ```
203
+
204
+ ### Running plugin builders directly:
205
+
206
+ ```bash
207
+ # Each plugin has its own build_index.py with vendor-specific options
208
+ python -m wpilib_mcp.plugins.wpilib.build_index --version stable --verbose
209
+ python -m wpilib_mcp.plugins.rev.build_index --verbose
210
+ python -m wpilib_mcp.plugins.ctre.build_index --version stable
211
+ python -m wpilib_mcp.plugins.redux.build_index
212
+ ```
213
+
214
+ ## Plugin Development
215
+
216
+ Create a new plugin by following this structure:
217
+
218
+ ```
219
+ plugins/
220
+ └── myplugin/
221
+ ├── __init__.py
222
+ ├── plugin.py # Must export `Plugin` class
223
+ ├── build_index.py # Index builder script (vendor-maintained)
224
+ └── data/
225
+ └── index.json
226
+ ```
227
+
228
+ Your `Plugin` class must implement `PluginBase`, and you should provide a `build_index.py` script:
229
+
230
+ ### Plugin Implementation
231
+
232
+ Your `Plugin` class must implement `PluginBase`:
233
+
234
+ ```python
235
+ from wpilib_mcp.plugins.base import PluginBase, PluginConfig, SearchResult, PageContent, DocSection
236
+
237
+ class Plugin(PluginBase):
238
+ @property
239
+ def name(self) -> str:
240
+ return "myplugin"
241
+
242
+ @property
243
+ def display_name(self) -> str:
244
+ return "My Plugin"
245
+
246
+ @property
247
+ def description(self) -> str:
248
+ return "Description of my plugin"
249
+
250
+ @property
251
+ def supported_versions(self) -> list[str]:
252
+ return ["2025"]
253
+
254
+ @property
255
+ def supported_languages(self) -> list[str]:
256
+ return ["Java", "Python"]
257
+
258
+ @property
259
+ def base_urls(self) -> list[str]:
260
+ return ["https://docs.example.com"]
261
+
262
+ async def initialize(self, config: PluginConfig) -> None:
263
+ # Load index, build search corpus
264
+ pass
265
+
266
+ async def search(self, query, version=None, language=None, max_results=10) -> list[SearchResult]:
267
+ # Return search results
268
+ pass
269
+
270
+ async def fetch_page(self, url) -> PageContent:
271
+ # Fetch and clean page content
272
+ pass
273
+
274
+ async def list_sections(self, version=None, language=None) -> list[DocSection]:
275
+ # Return documentation sections
276
+ pass
277
+ ```
278
+
279
+ ### Index Builder
280
+
281
+ Create a `build_index.py` that extends `BaseIndexBuilder`:
282
+
283
+ ```python
284
+ from wpilib_mcp.utils.indexer import BaseIndexBuilder
285
+
286
+ class MyPluginIndexBuilder(BaseIndexBuilder):
287
+ def __init__(self):
288
+ super().__init__(
289
+ vendor="myplugin",
290
+ base_url="https://docs.example.com",
291
+ max_pages=200,
292
+ )
293
+
294
+ @property
295
+ def start_urls(self) -> list[str]:
296
+ return ["https://docs.example.com/getting-started"]
297
+
298
+ def should_crawl(self, url: str) -> bool:
299
+ return "docs.example.com" in url
300
+
301
+ def extract_section(self, soup, url) -> str:
302
+ # Return section name based on URL/content
303
+ return "General"
304
+
305
+ def extract_language(self, soup, url) -> str:
306
+ return "All"
307
+
308
+ if __name__ == "__main__":
309
+ import asyncio
310
+ asyncio.run(MyPluginIndexBuilder().build_and_save("latest", Path("data/index.json")))
311
+ ```
312
+
313
+ ## Index File Format
314
+
315
+ Each plugin uses a JSON index with this structure:
316
+
317
+ ```json
318
+ {
319
+ "vendor": "myplugin",
320
+ "version": "2025",
321
+ "built_at": "2025-01-15T00:00:00Z",
322
+ "pages": [
323
+ {
324
+ "url": "https://docs.example.com/page",
325
+ "title": "Page Title",
326
+ "section": "Section Name",
327
+ "language": "Java",
328
+ "content": "Full searchable content...",
329
+ "content_preview": "First 300 chars for display..."
330
+ }
331
+ ]
332
+ }
333
+ ```
334
+
335
+ ## Development
336
+
337
+ ### Running Tests
338
+
339
+ ```bash
340
+ uv run pytest tests/ -v
341
+ ```
342
+
343
+ ### Project Structure
344
+
345
+ ```
346
+ wpilib-mcp/
347
+ ├── pyproject.toml # Project configuration
348
+ ├── config.json # User configuration
349
+ ├── src/wpilib_mcp/
350
+ │ ├── server.py # MCP server entry point
351
+ │ ├── plugin_loader.py # Plugin discovery/loading
352
+ │ ├── tool_router.py # Routes tools to plugins
353
+ │ ├── utils/
354
+ │ │ ├── fetch.py # HTTP with caching
355
+ │ │ ├── html.py # HTML cleaning
356
+ │ │ └── search.py # BM25 search
357
+ │ └── plugins/
358
+ │ ├── base.py # Plugin base class
359
+ │ ├── wpilib/ # WPILib plugin
360
+ │ ├── rev/ # REV plugin
361
+ │ ├── ctre/ # CTRE plugin
362
+ │ └── redux/ # Redux plugin
363
+ ├── scripts/
364
+ │ └── build_index.py # Index builder script
365
+ └── tests/
366
+ ├── test_search.py
367
+ └── test_plugins.py
368
+ ```
369
+
370
+ ## Example Queries
371
+
372
+ **Finding Command-Based Programming docs:**
373
+ ```
374
+ search_frc_docs(query="command based programming subsystems", vendors=["wpilib"])
375
+ ```
376
+
377
+ **Comparing motor controllers:**
378
+ ```
379
+ search_frc_docs(query="SparkMax configuration", vendors=["rev"])
380
+ search_frc_docs(query="TalonFX configuration", vendors=["ctre"])
381
+ ```
382
+
383
+ **Looking up specific hardware:**
384
+ ```
385
+ search_frc_docs(query="CANcoder absolute position swerve", vendors=["ctre"])
386
+ search_frc_docs(query="through bore encoder", vendors=["rev"])
387
+ ```
388
+
389
+ **Cross-vendor search:**
390
+ ```
391
+ search_frc_docs(query="brushless motor closed loop velocity control", vendors=["all"])
392
+ ```
393
+
394
+ ## License
395
+
396
+ BSD-3-Clause License - see LICENSE file for details.
397
+
398
+ ## Contributing
399
+
400
+ Contributions welcome! Please:
401
+
402
+ 1. Fork the repository
403
+ 2. Add tests for new functionality
404
+ 3. Submit a pull request
405
+
406
+ For new vendor plugins, please include:
407
+ - Complete plugin implementation
408
+ - Pre-built index file
409
+ - Documentation updates
@@ -0,0 +1,37 @@
1
+ wpilib_mcp/__init__.py,sha256=cXMssSHAC_SUiHYnlu72IfcPZIxeUxegAkDAG06oIp0,91
2
+ wpilib_mcp/plugin_loader.py,sha256=nCmRpVEs2zv7_F_ptV4DgJCNxNSuJJUWoivwA62AkDo,8962
3
+ wpilib_mcp/server.py,sha256=fhk_gP1VIGYBho6UOqgdI41I0xohIydZA-XF3nRNsE4,10951
4
+ wpilib_mcp/tool_router.py,sha256=3Fca3Z4BiHq7ipP7wZQi-rfGn4wKz1fx0Uwwcvdroj4,9963
5
+ wpilib_mcp/plugins/__init__.py,sha256=6NYhvOIhx1Q5MIkLLQDcQJo0uK3ezOoOQOG-dTNL9xk,187
6
+ wpilib_mcp/plugins/base.py,sha256=OTZSJtlJjo3oKvpLkj9G_y_Hw-Oe2Y7QuRusNK0sxdQ,7002
7
+ wpilib_mcp/plugins/ctre/__init__.py,sha256=dse6ZjgP_ovuxP_1R8vsNNt3hyfy7NpHhbY7IQtOvok,95
8
+ wpilib_mcp/plugins/ctre/build_index.py,sha256=rFtcKFLLN-DI5cjRh5luNvd-jUeIkxhtGCRRFYY5p24,6039
9
+ wpilib_mcp/plugins/ctre/plugin.py,sha256=41B-352tG12nuR8NYxdwWWkwH2yRy1aCvIbvDxEHP38,7869
10
+ wpilib_mcp/plugins/ctre/data/index.json,sha256=ftTCa-FEBREwjnYkDm4NRsnEzg5cRBEBCtkZVou-AWs,434350
11
+ wpilib_mcp/plugins/photonvision/__init__.py,sha256=B4N75yF0wp4kumBaCS9T-dmUZU4PZMQ1yMoVlIMpJpo,92
12
+ wpilib_mcp/plugins/photonvision/build_index.py,sha256=numVCFBv9BpY08DPla6kzAYKpoNYtsl3eT2vxnCN1Nk,8932
13
+ wpilib_mcp/plugins/photonvision/plugin.py,sha256=BCceXXnpka7c1AIOlgzXe_6RNIhGLyGzUXUPmNICXOY,7833
14
+ wpilib_mcp/plugins/photonvision/data/index.json,sha256=7zMO1yQGvuSwqUmGMEZpJhWcmOMj7V-hiBHTpRMHbcs,247612
15
+ wpilib_mcp/plugins/redux/__init__.py,sha256=ioq3E6okUy_P0_6LHKUZqwE0dWoUXCWBh9pYkkUzC6U,97
16
+ wpilib_mcp/plugins/redux/build_index.py,sha256=fpIbcipFhoYuL30h7iyF1oxjKQEKTzZqO4wjKDQAjf8,4895
17
+ wpilib_mcp/plugins/redux/plugin.py,sha256=1BVv1k5RIzGc-2udonZwVLeXdDZ1IotZnOMHYV1qYIs,7812
18
+ wpilib_mcp/plugins/redux/data/index.json,sha256=XANxS_HbVxsd5msGZ6HCh1hprNBw8cvlj_gWGZSrRYQ,98370
19
+ wpilib_mcp/plugins/rev/__init__.py,sha256=hrP4mZFfP_DsWoIoAk9pc8JosavHwEioWJYcPvxr17g,95
20
+ wpilib_mcp/plugins/rev/build_index.py,sha256=nqQV9RRGi5AHQU0_EHjR-ffaxSKl8Y7TPuG9lN5Ihqg,5703
21
+ wpilib_mcp/plugins/rev/plugin.py,sha256=7oZavjIBA8miWBFU97myH0oznu-VYmPWYZijSVtm1nA,7765
22
+ wpilib_mcp/plugins/rev/data/index.json,sha256=h-mzM-trfe82LL8TzIsg5YwvYlzyJ5zzd1ZpZ-mZaQQ,210040
23
+ wpilib_mcp/plugins/wpilib/__init__.py,sha256=G86KSRIPuOma2PGEBjmomLZFplzq4nCLo9xpp9fHA8Y,89
24
+ wpilib_mcp/plugins/wpilib/build_index.py,sha256=jw8-xJzAhtWxI_Oo6kdQoqteOeNiOtTT1y4slqbQ2gY,6684
25
+ wpilib_mcp/plugins/wpilib/plugin.py,sha256=lwZ5D80gXqX2M8_QYtDbckeMrWiJYUDqBDQQ3eCqNVE,8778
26
+ wpilib_mcp/plugins/wpilib/data/index_2025.json,sha256=wqs95sPACYzvvpEKEC6-leROBd0_mnnVMmaekXoeqEw,17386
27
+ wpilib_mcp/plugins/wpilib/data/index_stable.json,sha256=q1QCOoj8Xa1Vm1QO0xU9jps410SAVvoZrCm1jIh7gaA,1927785
28
+ wpilib_mcp/utils/__init__.py,sha256=sGGqwgbMNR8emv9vxsc-nhs1G2yLDa6XGXEYk5r51vk,286
29
+ wpilib_mcp/utils/fetch.py,sha256=zSsXFoo2dWJDpkKBHzcvSFobwRdktQEdoPtbHoxl-io,4640
30
+ wpilib_mcp/utils/html.py,sha256=uy1OXkoE9s7tRqA-Oc1VIGgF4V2s9XJiuxypSLbFapQ,8955
31
+ wpilib_mcp/utils/indexer.py,sha256=MncZslFy51gDf8G5esn8soGoK_6_gQ28XbFOHqmF2E0,9675
32
+ wpilib_mcp/utils/search.py,sha256=_KZgi_1n-dwLTO6JXXPizkfkdxBLoT0Y4YH_IoCexU4,6058
33
+ first_agentic_csa-0.2.0.dist-info/METADATA,sha256=fF_mZ681CpbEm61cooO7-7jUCOgbNxPQrut0u9laS_U,10183
34
+ first_agentic_csa-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
35
+ first_agentic_csa-0.2.0.dist-info/entry_points.txt,sha256=H9utHQ6kCQhVqoP10Ap3qUeMzUivFzFbhCScpjvKpec,61
36
+ first_agentic_csa-0.2.0.dist-info/licenses/LICENSE,sha256=EzfGZ7xpAEI8h-ZU9KjGNt8ny2mTCTMTC0WexTh5xXo,1497
37
+ first_agentic_csa-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ first-agentic-csa = wpilib_mcp.server:main
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2025, Rami Mouro
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
wpilib_mcp/__init__.py ADDED
@@ -0,0 +1,7 @@
1
+ """WPILib MCP Server - Plugin-based FRC documentation agent."""
2
+
3
+ __version__ = "0.1.0"
4
+
5
+
6
+
7
+