golf-mcp 0.1.19__py3-none-any.whl → 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.

Potentially problematic release.


This version of golf-mcp might be problematic. Click here for more details.

Files changed (123) hide show
  1. golf/__init__.py +9 -1
  2. golf/_endpoints.py +6 -0
  3. golf/_endpoints_fallback.py +10 -0
  4. golf/auth/__init__.py +188 -84
  5. golf/auth/api_key.py +6 -14
  6. golf/auth/factory.py +333 -0
  7. golf/auth/helpers.py +12 -42
  8. golf/auth/providers.py +396 -0
  9. golf/auth/registry.py +256 -0
  10. golf/cli/branding.py +192 -0
  11. golf/cli/main.py +28 -69
  12. golf/commands/__init__.py +2 -0
  13. golf/commands/build.py +4 -7
  14. golf/commands/init.py +30 -53
  15. golf/commands/run.py +50 -20
  16. golf/core/builder.py +356 -412
  17. golf/core/builder_auth.py +63 -144
  18. golf/core/builder_telemetry.py +26 -3
  19. golf/core/config.py +38 -59
  20. golf/core/parser.py +132 -139
  21. golf/core/platform.py +12 -10
  22. golf/core/telemetry.py +11 -19
  23. golf/core/transformer.py +38 -15
  24. golf/examples/__pycache__/__init__.cpython-311.pyc +0 -0
  25. golf/examples/basic/.coverage +0 -0
  26. golf/examples/basic/.env.example +8 -4
  27. golf/examples/basic/README.md +117 -45
  28. golf/examples/basic/__pycache__/auth.cpython-311.pyc +0 -0
  29. golf/examples/basic/auth.py +76 -0
  30. golf/examples/basic/golf.json +2 -5
  31. golf/examples/basic/htmlcov/.gitignore +2 -0
  32. golf/examples/basic/htmlcov/class_index.html +547 -0
  33. golf/examples/basic/htmlcov/coverage_html_cb_6fb7b396.js +733 -0
  34. golf/examples/basic/htmlcov/favicon_32_cb_58284776.png +0 -0
  35. golf/examples/basic/htmlcov/function_index.html +2091 -0
  36. golf/examples/basic/htmlcov/index.html +349 -0
  37. golf/examples/basic/htmlcov/keybd_closed_cb_ce680311.png +0 -0
  38. golf/examples/basic/htmlcov/status.json +1 -0
  39. golf/examples/basic/htmlcov/style_cb_8e611ae1.css +337 -0
  40. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496___init___py.html +323 -0
  41. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_api_key_py.html +170 -0
  42. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_factory_py.html +430 -0
  43. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_helpers_py.html +288 -0
  44. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_providers_py.html +493 -0
  45. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_registry_py.html +353 -0
  46. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950___init___py.html +120 -0
  47. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950_instrumentation_py.html +1535 -0
  48. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db___init___py.html +98 -0
  49. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_branding_py.html +289 -0
  50. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_main_py.html +476 -0
  51. golf/examples/basic/htmlcov/z_5a6c4e6bcc86fb2f___init___py.html +97 -0
  52. golf/examples/basic/htmlcov/z_6cadab9ec0df475d___init___py.html +102 -0
  53. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_build_py.html +178 -0
  54. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_init_py.html +387 -0
  55. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_run_py.html +222 -0
  56. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4___init___py.html +106 -0
  57. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4__endpoints_fallback_py.html +107 -0
  58. golf/examples/basic/htmlcov/z_7ba499ed22986217___init___py.html +98 -0
  59. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_auth_py.html +306 -0
  60. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_metrics_py.html +329 -0
  61. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_py.html +1471 -0
  62. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_telemetry_py.html +186 -0
  63. golf/examples/basic/htmlcov/z_7ba499ed22986217_config_py.html +315 -0
  64. golf/examples/basic/htmlcov/z_7ba499ed22986217_parser_py.html +1149 -0
  65. golf/examples/basic/htmlcov/z_7ba499ed22986217_platform_py.html +279 -0
  66. golf/examples/basic/htmlcov/z_7ba499ed22986217_telemetry_py.html +589 -0
  67. golf/examples/basic/htmlcov/z_7ba499ed22986217_transformer_py.html +286 -0
  68. golf/examples/basic/htmlcov/z_7d7da37693a43688___init___py.html +107 -0
  69. golf/examples/basic/htmlcov/z_7d7da37693a43688_collector_py.html +417 -0
  70. golf/examples/basic/htmlcov/z_7d7da37693a43688_registry_py.html +109 -0
  71. golf/examples/basic/htmlcov/z_abe733142b40ad4e___init___py.html +109 -0
  72. golf/examples/basic/htmlcov/z_abe733142b40ad4e_context_py.html +150 -0
  73. golf/examples/basic/htmlcov/z_abe733142b40ad4e_elicitation_py.html +267 -0
  74. golf/examples/basic/htmlcov/z_abe733142b40ad4e_sampling_py.html +318 -0
  75. golf/examples/basic/prompts/__pycache__/welcome.cpython-311.pyc +0 -0
  76. golf/examples/basic/prompts/welcome.py +3 -5
  77. golf/examples/basic/resources/__pycache__/current_time.cpython-311.pyc +0 -0
  78. golf/examples/basic/resources/__pycache__/info.cpython-311.pyc +0 -0
  79. golf/examples/basic/resources/current_time.py +5 -13
  80. golf/examples/basic/resources/weather/__pycache__/common.cpython-311.pyc +0 -0
  81. golf/examples/basic/resources/weather/__pycache__/current.cpython-311.pyc +0 -0
  82. golf/examples/basic/resources/weather/__pycache__/forecast.cpython-311.pyc +0 -0
  83. golf/examples/basic/resources/weather/city.py +46 -0
  84. golf/examples/basic/resources/weather/common.py +4 -11
  85. golf/examples/basic/resources/weather/current.py +5 -5
  86. golf/examples/basic/resources/weather/forecast.py +5 -5
  87. golf/examples/basic/tools/__pycache__/calculator.cpython-311.pyc +0 -0
  88. golf/examples/basic/tools/calculator.py +94 -0
  89. golf/examples/basic/tools/say/__pycache__/hello.cpython-311.pyc +0 -0
  90. golf/examples/basic/tools/say/hello.py +65 -0
  91. golf/metrics/collector.py +100 -19
  92. golf/telemetry/__init__.py +4 -0
  93. golf/telemetry/instrumentation.py +496 -174
  94. golf/utilities/__init__.py +12 -0
  95. golf/utilities/context.py +53 -0
  96. golf/utilities/elicitation.py +170 -0
  97. golf/utilities/sampling.py +221 -0
  98. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/METADATA +56 -110
  99. golf_mcp-0.2.0.dist-info/RECORD +110 -0
  100. golf/auth/oauth.py +0 -861
  101. golf/auth/provider.py +0 -115
  102. golf/examples/api_key/.env +0 -2
  103. golf/examples/api_key/.env.example +0 -1
  104. golf/examples/api_key/README.md +0 -84
  105. golf/examples/api_key/golf.json +0 -8
  106. golf/examples/api_key/pre_build.py +0 -11
  107. golf/examples/api_key/tools/issues/create.py +0 -93
  108. golf/examples/api_key/tools/issues/list.py +0 -92
  109. golf/examples/api_key/tools/repos/list.py +0 -111
  110. golf/examples/api_key/tools/search/code.py +0 -106
  111. golf/examples/api_key/tools/users/get.py +0 -82
  112. golf/examples/basic/.env +0 -5
  113. golf/examples/basic/pre_build.py +0 -28
  114. golf/examples/basic/tools/github_user.py +0 -65
  115. golf/examples/basic/tools/hello.py +0 -34
  116. golf/examples/basic/tools/payments/charge.py +0 -70
  117. golf/examples/basic/tools/payments/common.py +0 -36
  118. golf/examples/basic/tools/payments/refund.py +0 -61
  119. golf_mcp-0.1.19.dist-info/RECORD +0 -60
  120. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/WHEEL +0 -0
  121. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/entry_points.txt +0 -0
  122. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/licenses/LICENSE +0 -0
  123. {golf_mcp-0.1.19.dist-info → golf_mcp-0.2.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: golf-mcp
3
- Version: 0.1.19
3
+ Version: 0.2.0
4
4
  Summary: Framework for building MCP servers
5
5
  Author-email: Antoni Gmitruk <antoni@golf.dev>
6
6
  License-Expression: Apache-2.0
@@ -21,19 +21,19 @@ Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: typer>=0.15.4
23
23
  Requires-Dist: rich>=14.0.0
24
- Requires-Dist: fastmcp<2.6.0,>=2.0.0
24
+ Requires-Dist: fastmcp<3.0.0,>=2.11.0
25
25
  Requires-Dist: pydantic>=2.11.0
26
+ Requires-Dist: pydantic-settings>=2.0.0
26
27
  Requires-Dist: python-dotenv>=1.1.0
27
28
  Requires-Dist: black>=24.10.0
28
29
  Requires-Dist: pyjwt>=2.0.0
29
30
  Requires-Dist: httpx>=0.28.1
30
31
  Requires-Dist: posthog>=4.1.0
31
- Provides-Extra: telemetry
32
- Requires-Dist: opentelemetry-api>=1.33.1; extra == "telemetry"
33
- Requires-Dist: opentelemetry-sdk>=1.33.1; extra == "telemetry"
34
- Requires-Dist: opentelemetry-instrumentation-asgi>=0.40b0; extra == "telemetry"
35
- Requires-Dist: opentelemetry-exporter-otlp-proto-http>=0.40b0; extra == "telemetry"
36
- Requires-Dist: wrapt>=1.17.0; extra == "telemetry"
32
+ Requires-Dist: opentelemetry-api>=1.33.1
33
+ Requires-Dist: opentelemetry-sdk>=1.33.1
34
+ Requires-Dist: opentelemetry-instrumentation-asgi>=0.40b0
35
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=0.40b0
36
+ Requires-Dist: wrapt>=1.17.0
37
37
  Provides-Extra: metrics
38
38
  Requires-Dist: prometheus-client>=0.22.1; extra == "metrics"
39
39
  Dynamic: license-file
@@ -68,9 +68,9 @@ Dynamic: license-file
68
68
 
69
69
  ## Overview
70
70
 
71
- Golf is a **framework** designed to streamline the creation of MCP server applications. It allows developers to define server's capabilities—*tools*, *prompts*, and *resources*—as simple Python files within a conventional directory structure. Golf then automatically discovers, parses, and compiles these components into a runnable FastMCP server, minimizing boilerplate and accelerating development.
71
+ Golf is a **framework** designed to streamline the creation of MCP server applications. It allows developers to define server's capabilities—*tools*, *prompts*, and *resources*—as simple Python files within a conventional directory structure. Golf then automatically discovers, parses, and compiles these components into a runnable MCP server, minimizing boilerplate and accelerating development.
72
72
 
73
- With Golf, you can focus on implementing your agent's logic rather than wrestling with server setup and integration complexities. It's built for developers who want a quick, organized way to build powerful MCP servers.
73
+ With Golf v0.2.0, you get **enterprise-grade authentication** (JWT, OAuth Server, API key, development tokens), **built-in utilities** for LLM interactions, and **automatic telemetry** integration. Focus on implementing your agent's logic while Golf handles authentication, monitoring, and server infrastructure.
74
74
 
75
75
  ## Quick Start
76
76
 
@@ -102,7 +102,7 @@ cd your-project-name
102
102
  golf build dev
103
103
  golf run
104
104
  ```
105
- This will start the FastMCP server, typically on `http://127.0.0.1:3000` (configurable in `golf.json`).
105
+ This will start the MCP server, typically on `http://localhost:3000` (configurable in `golf.json`).
106
106
 
107
107
  That's it! Your Golf server is running and ready for integration.
108
108
 
@@ -125,10 +125,11 @@ A Golf project initialized with `golf init` will have a structure similar to thi
125
125
  │ └─ welcome.py # Example prompt
126
126
 
127
127
  ├─ .env # Environment variables (e.g., API keys, server port)
128
- └─ pre_build.py # (Optional) Script for pre-build hooks (e.g., auth setup)
128
+ └─ auth.py # Authentication configuration (JWT, OAuth Server, API key, dev tokens)
129
129
  ```
130
130
 
131
131
  - **`golf.json`**: Configures server name, port, transport, telemetry, and other build settings.
132
+ - **`auth.py`**: Dedicated authentication configuration file (new in v0.2.0, breaking change from v0.1.x authentication API) for JWT, OAuth Server, API key, or development authentication.
132
133
  - **`tools/`**, **`resources/`**, **`prompts/`**: Contain your Python files, each defining a single component. These directories can also contain nested subdirectories to further organize your components (e.g., `tools/payments/charge.py`). The module docstring of each file serves as the component's description.
133
134
  - Component IDs are automatically derived from their file path. For example, `tools/hello.py` becomes `hello`, and a nested file like `tools/payments/submit.py` would become `submit_payments` (filename, followed by reversed parent directories under the main category, joined by underscores).
134
135
  - **`common.py`** (not shown, but can be placed in subdirectories like `tools/payments/common.py`): Used to share code (clients, models, etc.) among components in the same subdirectory.
@@ -165,118 +166,63 @@ export = hello
165
166
  ```
166
167
  Golf will automatically discover this file. The module docstring `"""Hello World tool {{project_name}}."""` is used as the tool's description. It infers parameters from the `hello` function's signature and uses the `Output` Pydantic model for the output schema. The tool will be registered with the ID `hello`.
167
168
 
168
- ## Configuration (`golf.json`)
169
+ ## Authentication & Features
169
170
 
170
- The `golf.json` file is the heart of your Golf project configuration. Here's what each field controls:
171
+ Golf includes enterprise-grade authentication, built-in utilities, and automatic telemetry:
171
172
 
172
- ```jsonc
173
- {
174
- "name": "{{project_name}}", // Your MCP server name (required)
175
- "description": "A Golf project", // Brief description of your server's purpose
176
- "host": "127.0.0.1", // Server host - use "0.0.0.0" to listen on all interfaces
177
- "port": 3000, // Server port - any available port number
178
- "transport": "sse", // Communication protocol:
179
- // - "sse": Server-Sent Events (recommended for web clients)
180
- // - "streamable-http": HTTP with streaming support
181
- // - "stdio": Standard I/O (for CLI integration)
182
-
183
- // HTTP Transport Configuration (optional)
184
- "stateless_http": false, // Make streamable-http transport stateless (new session per request)
185
- // When true, server restarts won't break existing client connections
186
-
187
- // Health Check Configuration (optional)
188
- "health_check_enabled": false, // Enable health check endpoint for Kubernetes/load balancers
189
- "health_check_path": "/health", // HTTP path for health check endpoint
190
- "health_check_response": "OK", // Response text returned by health check
191
-
192
- // OpenTelemetry Configuration (optional)
193
- "opentelemetry_enabled": false, // Enable distributed tracing
194
- "opentelemetry_default_exporter": "console" // Default exporter if OTEL_TRACES_EXPORTER not set
195
- // Options: "console", "otlp_http"
196
- }
197
- ```
198
-
199
- ### Key Configuration Options:
200
-
201
- - **`name`**: The identifier for your MCP server. This will be shown to clients connecting to your server.
202
- - **`transport`**: Choose based on your client needs:
203
- - `"sse"` is ideal for web-based clients and real-time communication
204
- - `"streamable-http"` provides HTTP streaming for traditional API clients
205
- - `"stdio"` enables integration with command-line tools and scripts
206
- - **`host` & `port`**: Control where your server listens. Use `"127.0.0.1"` for local development or `"0.0.0.0"` to accept external connections.
207
- - **`stateless_http`**: When true, makes the streamable-http transport stateless by creating a new session for each request. This ensures that server restarts don't break existing client connections, making the server truly stateless.
208
- - **`health_check_enabled`**: When true, enables a health check endpoint for Kubernetes readiness/liveness probes and load balancers
209
- - **`health_check_path`**: Customizable path for the health check endpoint (defaults to "/health")
210
- - **`health_check_response`**: Customizable response text for successful health checks (defaults to "OK")
211
- - **`opentelemetry_enabled`**: When true, enables distributed tracing for debugging and monitoring your MCP server
212
- - **`opentelemetry_default_exporter`**: Sets the default trace exporter. Can be overridden by the `OTEL_TRACES_EXPORTER` environment variable
213
-
214
- ## Features
215
-
216
- ### 🏥 Health Check Support
217
-
218
- Golf includes built-in health check endpoint support for production deployments. When enabled, it automatically adds a custom HTTP route that can be used by:
219
- - Kubernetes readiness and liveness probes
220
- - Load balancers and reverse proxies
221
- - Monitoring systems
222
- - Container orchestration platforms
223
-
224
- #### Configuration
225
-
226
- Enable health checks in your `golf.json`:
227
- ```json
228
- {
229
- "health_check_enabled": true,
230
- "health_check_path": "/health",
231
- "health_check_response": "Service is healthy"
232
- }
173
+ ```python
174
+ # auth.py - Configure authentication
175
+ from golf.auth import configure_auth, JWTAuthConfig, StaticTokenConfig, OAuthServerConfig
176
+
177
+ # JWT authentication (production)
178
+ configure_auth(JWTAuthConfig(
179
+ jwks_uri_env_var="JWKS_URI",
180
+ issuer_env_var="JWT_ISSUER",
181
+ audience_env_var="JWT_AUDIENCE",
182
+ required_scopes=["read", "write"]
183
+ ))
184
+
185
+ # OAuth Server mode (Golf acts as OAuth 2.0 server)
186
+ # configure_auth(OAuthServerConfig(
187
+ # base_url="https://your-golf-server.com",
188
+ # valid_scopes=["read", "write", "admin"]
189
+ # ))
190
+
191
+ # Static tokens (development only)
192
+ # configure_auth(StaticTokenConfig(
193
+ # tokens={"dev-token": {"client_id": "dev", "scopes": ["read"]}}
194
+ # ))
195
+
196
+ # Built-in utilities available in all tools
197
+ from golf.utils import elicit, sample, get_context
233
198
  ```
234
199
 
235
- The generated server will include a route like:
236
- ```python
237
- @mcp.custom_route('/health', methods=["GET"])
238
- async def health_check(request: Request) -> PlainTextResponse:
239
- """Health check endpoint for Kubernetes and load balancers."""
240
- return PlainTextResponse("Service is healthy")
200
+ ```bash
201
+ # Automatic telemetry with Golf Platform
202
+ export GOLF_API_KEY="your-key"
203
+ golf run # Telemetry enabled automatically
241
204
  ```
242
205
 
243
- ### 🔍 OpenTelemetry Support
206
+ **[📚 Complete Documentation →](https://docs.golf.dev)**
244
207
 
245
- Golf includes built-in OpenTelemetry instrumentation for distributed tracing. When enabled, it automatically traces:
246
- - Tool executions with arguments and results
247
- - Resource reads and template expansions
248
- - Prompt generations
249
- - HTTP requests and sessions
208
+ ## Configuration
250
209
 
251
- #### Configuration
210
+ Basic configuration in `golf.json`:
252
211
 
253
- Enable OpenTelemetry in your `golf.json`:
254
212
  ```json
255
213
  {
256
- "opentelemetry_enabled": true,
257
- "opentelemetry_default_exporter": "otlp_http"
214
+ "name": "My Golf Server",
215
+ "host": "localhost",
216
+ "port": 3000,
217
+ "transport": "sse",
218
+ "opentelemetry_enabled": false,
219
+ "detailed_tracing": false
258
220
  }
259
221
  ```
260
222
 
261
- Then configure via environment variables:
262
- ```bash
263
- # For OTLP HTTP exporter (e.g., Jaeger, Grafana Tempo)
264
- OTEL_TRACES_EXPORTER=otlp_http
265
- OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318/v1/traces
266
- OTEL_SERVICE_NAME=my-golf-server # Optional, defaults to project name
267
-
268
- # For console exporter (debugging)
269
- OTEL_TRACES_EXPORTER=console
270
- ```
271
-
272
- **Note**: When using the OTLP HTTP exporter, you must set `OTEL_EXPORTER_OTLP_ENDPOINT`. If not configured, Golf will display a warning and disable tracing to avoid errors.
273
-
274
- ## Roadmap
275
-
276
- Here are the things we are working hard on:
277
-
278
- * **`golf deploy` command for one click deployments to Vercel, Blaxel and other providers**
279
- * **Production-ready OAuth token management, to allow for persistent, encrypted token storage and client mapping**
223
+ - **`transport`**: Choose `"sse"`, `"streamable-http"`, or `"stdio"`
224
+ - **`opentelemetry_enabled`**: Auto-enabled with `GOLF_API_KEY`
225
+ - **`detailed_tracing`**: Capture input/output (use carefully with sensitive data)
280
226
 
281
227
 
282
228
  ## Privacy & Telemetry
@@ -0,0 +1,110 @@
1
+ golf/__init__.py,sha256=PvdCpKhiFWU3_6sSOP-rJbiDh0ami4y0Z77rZlqtUs0,306
2
+ golf/_endpoints.py,sha256=-mvAmjx3YtqfAdajO13Kv7LKVBMdqsKqX0_3aCmCK4I,317
3
+ golf/_endpoints_fallback.py,sha256=CD6m45Ams1A9HVKowY8dCFUDMiFmJ8ZWSwHCENvU5u4,386
4
+ golf/auth/__init__.py,sha256=pih-rYpZAlalInzv_H2HPVCznKcpmTtxGsa_6DU_x8U,6203
5
+ golf/auth/api_key.py,sha256=OonqTlG6USJxqK8TlPviJTv7sgYmTVfCxG_JsEjnEM4,2320
6
+ golf/auth/factory.py,sha256=hf8r1RwTULQ5s8qTRIyJJrY2jtGDG-uwcuX0MtLDbCs,11853
7
+ golf/auth/helpers.py,sha256=ElyX5iyDLfjFIFzE2psavWA3I1_QG1lcuNWsQ2G9bw0,5672
8
+ golf/auth/providers.py,sha256=TGAuusBnLnzqhAa-4oqUBPkzExR9hEDkSJjMmlVMNTU,16859
9
+ golf/auth/registry.py,sha256=Rjj7LnWvzEsI1GCnFbFcxpRllrVanD9bumWPaJ1giFQ,7960
10
+ golf/cli/__init__.py,sha256=R8Y8KdD2C8gDo24fXGq-fdWWNeaq3MYjrbaSB8Hb-Hg,45
11
+ golf/cli/branding.py,sha256=ndpy2kVxBzqr4fwsAlh_fbhxqgRPoF6kM3ufP9hg5QI,6896
12
+ golf/cli/main.py,sha256=0TAccbjB9wmB55GmCV3X1CpzaOoMSzpQ-bx2oxi-THw,13536
13
+ golf/commands/__init__.py,sha256=j2r-0Zg2BSqG7WtZczAtyAsrur7kRQpEN9ZJuoX1XQ8,119
14
+ golf/commands/build.py,sha256=sLq9lSW4naq2vIlBreKI5SGnviQrhBWw13zfOZOKhuM,2293
15
+ golf/commands/init.py,sha256=KkAg_3-KxBDFOcZqUHqcPAkDipykFVaLWpQ2tydnVPk,9617
16
+ golf/commands/run.py,sha256=a8GSwLt6E2cUJespv-u3jbD-rNUMHqF3VArD1uXV-Vk,4299
17
+ golf/core/__init__.py,sha256=4bKeskJ2fPaZqkz2xQScSa3phRLLrmrczwSL632jv-o,52
18
+ golf/core/builder.py,sha256=Ghm9YUDIWnUc0bIxfKD75OZIa-h0B61iC26OEmfA4ug,62214
19
+ golf/core/builder_auth.py,sha256=ciaovnjsRIOyrbkUnEcu1k_vOpqw_Hqe7209qlNQz1s,8222
20
+ golf/core/builder_metrics.py,sha256=j6Gtgd867o46JbDfSNGNsHt1QtV1XHKUJs1z8r4siQM,8830
21
+ golf/core/builder_telemetry.py,sha256=86bp7UlMUN6JyQRrZ5EizovP6AJ_q65OANJTeJXDIKc,3421
22
+ golf/core/config.py,sha256=h8LWKdD-5vS8vRGs1qsCI2d8EbtjIKuXM3rUJ0T7EZ8,7452
23
+ golf/core/parser.py,sha256=f9WqmLWlFuXQCObl2Qmna9bp_Bo0p0eIlukzwFaBSzo,43373
24
+ golf/core/platform.py,sha256=0TxLfVPBhBR82aJAQWEJcnkGuQv65C9gYYy7P2foUVk,6662
25
+ golf/core/telemetry.py,sha256=dXoWrgrQpj_HGrl_8TBZmRnuLxFKEn0GSDWQ9qq3ZQM,15686
26
+ golf/core/transformer.py,sha256=iTDNFqdVeOjzl-acdjp8ZaTXss8Eptqu5cs4qLWt9SU,6914
27
+ golf/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ golf/examples/__pycache__/__init__.cpython-311.pyc,sha256=mCoo2b87qTnENT0NJFqKG1F17tpQ6Tsl9xG4_7OllFk,164
29
+ golf/examples/basic/.coverage,sha256=N3Iy2-a2sCVViPClzkLgSnGvrOgk8IdaT-MNlsH94bA,53248
30
+ golf/examples/basic/.env.example,sha256=hxl1B9Vo7nCN5dWvTeN6BpOxTwHwPLEQzsnToHhx7nk,256
31
+ golf/examples/basic/README.md,sha256=p8KMyaNXGZtrbgckW-Thu_5RKXViGiyZ5hHEiJ6Zc-U,3283
32
+ golf/examples/basic/auth.py,sha256=cdPWFU__i8Jw8xI1hgGSobhaC4YIBKsh5LsQY2GS2dw,2789
33
+ golf/examples/basic/golf.json,sha256=327fO4XmvksmZdlYtYPmRcB6TgEVkD1nSvHAuGyWsYA,98
34
+ golf/examples/basic/__pycache__/auth.cpython-311.pyc,sha256=yrJPpSEDdGPvTdi1s737N7QxyFXJHz3jF5b1uUL0DQw,967
35
+ golf/examples/basic/htmlcov/.gitignore,sha256=jC6x-oLDFNwReRJ0y3qpZyRdGQhELW54i8d_bhqlwrg,27
36
+ golf/examples/basic/htmlcov/class_index.html,sha256=hViC4j--x_M_CD9sqN_RpxHynu8mIac2Lj2aWsX3ilg,31673
37
+ golf/examples/basic/htmlcov/coverage_html_cb_6fb7b396.js,sha256=Jyn7_pfQWsPwW1zLvSBKtXhsJzxnTw_zsBFgwNNWVJw,25474
38
+ golf/examples/basic/htmlcov/favicon_32_cb_58284776.png,sha256=vIEA-odDwRvSQ-syWfSwEnWGUWEv2b-Tv4tzTRfwJWE,1732
39
+ golf/examples/basic/htmlcov/function_index.html,sha256=zSUZAsA15_Fo3lQKbebiqsonQ4lR0JE-x2XV0hzid-k,130258
40
+ golf/examples/basic/htmlcov/index.html,sha256=sDFuY9PVC0yvXQ6_1Ba7dXiTlpPt3iLuGdQr69WJSGY,16170
41
+ golf/examples/basic/htmlcov/keybd_closed_cb_ce680311.png,sha256=fZv4rmY3DkNJtPQjrFJ5UBOE5DdNof3mdeCZWC7TOoo,9004
42
+ golf/examples/basic/htmlcov/status.json,sha256=60kDS4OlcnKzYYq6oU3Dtkh_LdpTfI7OFoQfchibnE0,12761
43
+ golf/examples/basic/htmlcov/style_cb_8e611ae1.css,sha256=WVPofNVQW2x3C2bgcUtxDZW9EBcrj8KO8c1Zc5PpDbA,14077
44
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496___init___py.html,sha256=zgb7wfWftKVixcr_pbPwFET-ElmGRPPluWTlDPVwFrQ,52035
45
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_api_key_py.html,sha256=r0fEOPNFhpOTdCvg7c0exvJclEY6z_c_rJYpS0G6_H8,20246
46
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_factory_py.html,sha256=Ia_PCn67Qgc0JKQ4-WSQN51GCQnRR4hpsTQfwvkNf68,91241
47
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_helpers_py.html,sha256=xmT6EBUECgRa4oV6hRUhQVS7VXyCHj5-Rp-45XEGCjE,49423
48
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_providers_py.html,sha256=SlnuV9y6S1YtUcFM9SPS-YQtVrybLRHfK0DFI7kwsI0,115959
49
+ golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_registry_py.html,sha256=0nXwjwwcjkrehra06DEaC2xSk7TGUbn4__s3RRrvSZg,62454
50
+ golf/examples/basic/htmlcov/z_3ec3b3f490dc0950___init___py.html,sha256=k-y9x9-OdTKtawKCRVd2wMrYmVhC9sTS-haSAtvrOMY,9200
51
+ golf/examples/basic/htmlcov/z_3ec3b3f490dc0950_instrumentation_py.html,sha256=AdIFH-vByG7KFPz3qps3HYOdxk7rgONwkZ27LhkFi-s,417290
52
+ golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db___init___py.html,sha256=QxLEICENh9QwYHYNLVPd_vU_IRFnlEZCjVslwgqq1Lc,4805
53
+ golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_branding_py.html,sha256=bkJ9tkGzC0VnQs5rivMV106teHJsgKVQb9YRHwHd8nQ,60047
54
+ golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_main_py.html,sha256=45oo4-dUKACLeUWhLwLWrhIcI-KVLQF7ed0PVxi4c24,102984
55
+ golf/examples/basic/htmlcov/z_5a6c4e6bcc86fb2f___init___py.html,sha256=uHIKsQtVGcihLOXh5cB7KoVaQsLUccBkduJUi3Y02PY,4626
56
+ golf/examples/basic/htmlcov/z_6cadab9ec0df475d___init___py.html,sha256=kYWROimyCLyQJZRjfFBh4avanb5sAPpnWhQnxMT4NF8,5856
57
+ golf/examples/basic/htmlcov/z_6cadab9ec0df475d_build_py.html,sha256=Wj1_3n2nUyGoaDHAQ-bdtE4NfQe0I6mm3qN7nTl3zzg,23528
58
+ golf/examples/basic/htmlcov/z_6cadab9ec0df475d_init_py.html,sha256=PCiEZg3QMurUb5KegHey0mHVoR2OaHjaYiSQuKflTqw,80605
59
+ golf/examples/basic/htmlcov/z_6cadab9ec0df475d_run_py.html,sha256=ErUZwW7X3muc3xH1nyJf_WxVwHdjcMSm9yeDJie5PsY,39397
60
+ golf/examples/basic/htmlcov/z_6fcdee0582ba84e4___init___py.html,sha256=Le0vtWMqnpitbucC8U2MgQf-IGBFDNxTX6utP9aRyAE,6525
61
+ golf/examples/basic/htmlcov/z_6fcdee0582ba84e4__endpoints_fallback_py.html,sha256=Gf4Gt4_4lCflaeWLbgmP5WSiD05ArUbU5S4T2AsMCuE,6878
62
+ golf/examples/basic/htmlcov/z_7ba499ed22986217___init___py.html,sha256=tEIPcurgzHhPcyAUbcRiI-8Buudd3A1sKnNZa-IGk-0,4802
63
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_auth_py.html,sha256=89A6ANyfS3gxN4AFN6TRjYT1sGVb0diQWrAaC8-i3qY,51902
64
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_metrics_py.html,sha256=uQWrOZdKrWKD_Di-sbJEoznq4BTxN0evi2z3NRjJ9ss,54395
65
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_py.html,sha256=m-QYvSKlswhhaGILv0gqqAQX0sCZB6EWBUo-Ki3utdQ,380457
66
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_telemetry_py.html,sha256=t0yvLPpKpNk0z8hrjwnYyRXFibT_IJQ6lJrraWdMaWg,23370
67
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_config_py.html,sha256=kqTI5yUW5tg1Y1IhNJaj4KfOmKhNUr1iAdoTNY76eW4,62661
68
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_parser_py.html,sha256=XEqTSmcSgG19RXLzhwNi8SSh3vQ86fJrDlEl1PqG2Yk,314847
69
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_platform_py.html,sha256=3u6FcMaC6cA8YWNosrfk25Wflf0Ley4kPWgmXrOBWBw,53765
70
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_telemetry_py.html,sha256=PKEMpNa6q6doKVg2ep4kKV8gU2Ipxgm36WG4GnXJ6-8,123832
71
+ golf/examples/basic/htmlcov/z_7ba499ed22986217_transformer_py.html,sha256=iKISJ-kK2nyi-_EoIKO2-6fKNfVFwmieLGOs24zkAjI,55716
72
+ golf/examples/basic/htmlcov/z_7d7da37693a43688___init___py.html,sha256=eOs4-sH_X0LmTYRFICyo1LyPJ6hNsTmxHcehiK7zYyg,6893
73
+ golf/examples/basic/htmlcov/z_7d7da37693a43688_collector_py.html,sha256=TEFwlJG3mbcvaViKfqQZf3MJOmd6rX_qY0Epvzx_tZA,87438
74
+ golf/examples/basic/htmlcov/z_7d7da37693a43688_registry_py.html,sha256=n1QLJ0q_Jj0Jo4wDYhs1_rH0f_-oiAvDz2bUaUcD0-s,7226
75
+ golf/examples/basic/htmlcov/z_abe733142b40ad4e___init___py.html,sha256=TU10SrKN6mDhaLTMnZrLayJSjeML1KQjveLoWP0X1nw,7716
76
+ golf/examples/basic/htmlcov/z_abe733142b40ad4e_context_py.html,sha256=1UrX3R8y6UchmJ3jEmcmw6QUz5N5zj5MREaueTmiQI0,15273
77
+ golf/examples/basic/htmlcov/z_abe733142b40ad4e_elicitation_py.html,sha256=NgMC9ai9BWFSfTE0bFb83cVfEO6xa4uXrgQuC4gcxRQ,42021
78
+ golf/examples/basic/htmlcov/z_abe733142b40ad4e_sampling_py.html,sha256=8aN9bSNFUG321WeRCmiSp1SOr7tQX4vZj1U-BecXZcc,53766
79
+ golf/examples/basic/prompts/welcome.py,sha256=xyW4pwvpcPQi0_H9tP7OX53Kv62R1aCYcVq9xMw147k,760
80
+ golf/examples/basic/prompts/__pycache__/welcome.cpython-311.pyc,sha256=HmZYZR8uCCpOFlqz_YMELRibUlQuVuVVEpC0vPeFK60,885
81
+ golf/examples/basic/resources/current_time.py,sha256=bJMrRZQ0WPgnQxMl_4-4ynZyq7ki-wGMbMFpaYOH7PY,859
82
+ golf/examples/basic/resources/info.py,sha256=LxHzg_TmwonSu1vSkuNcpUq5JrBu-9yzoGaARE1f2KU,727
83
+ golf/examples/basic/resources/__pycache__/current_time.cpython-311.pyc,sha256=negX9O1PZRI8KhLFnwtrzjJngzYpnBP8vn_pxoiLlys,1642
84
+ golf/examples/basic/resources/__pycache__/info.cpython-311.pyc,sha256=ydWXFP9dNA0YsNsOyjF4iVyonJhCviyRaXYHmgmjfLY,1183
85
+ golf/examples/basic/resources/weather/city.py,sha256=nnh6l0vZR4v8b6JbK0lebxp7FF6EoKxAPbifhQvoYcc,1278
86
+ golf/examples/basic/resources/weather/common.py,sha256=ZZADyVjXkOSZpDaq_b-ya2qwp-uNdQWOJyKp8tV7K7U,1616
87
+ golf/examples/basic/resources/weather/current.py,sha256=CayCCAyOtGKOiZRHfNop4oG78Sc05-hSVcopr_p1UKc,933
88
+ golf/examples/basic/resources/weather/forecast.py,sha256=tTybP1e-irKJGGWTJITJernPMU3S_em2G7dd-1x2yak,990
89
+ golf/examples/basic/resources/weather/__pycache__/common.cpython-311.pyc,sha256=Y4M6zON6UOGe80B26G6Lv4teSxwjp_DwkQ3wDKzT1Ng,2945
90
+ golf/examples/basic/resources/weather/__pycache__/current.cpython-311.pyc,sha256=sHVa08P0BidxA-6PrNb3jF4XGDjtx547J5kSEWwJXPw,1325
91
+ golf/examples/basic/resources/weather/__pycache__/forecast.cpython-311.pyc,sha256=quP9zdfnAwM725T6zzjL9zrCQJ66dLGDVnfNnaM5vrc,1397
92
+ golf/examples/basic/tools/calculator.py,sha256=QTDvE7ItMol2eIR1mgc6moRhhl3p-q63bgieWr5yF5c,3070
93
+ golf/examples/basic/tools/__pycache__/calculator.cpython-311.pyc,sha256=msE7xTPw_VbLeO4CgexOtxBNYDm35SMmm01Zy2ApHTY,3920
94
+ golf/examples/basic/tools/say/hello.py,sha256=zTfR-M2ElhrBF5Q2QHeKGORWLGxnvtErUjzw3YEuzpg,2006
95
+ golf/examples/basic/tools/say/__pycache__/hello.cpython-311.pyc,sha256=KudoB0w9qpRdxEaJQHtark4waEHBk_SbbnOOzjVFiQQ,2731
96
+ golf/metrics/__init__.py,sha256=O91y-hj_E9R06gqV8pDZrzHxOIl-1T415Hj9RvFAp3o,283
97
+ golf/metrics/collector.py,sha256=ScKeOyDNawZRMIRYBFqNqmaYAIVJQ2riMu_qOE9ugvU,10967
98
+ golf/metrics/registry.py,sha256=mXQE4Pwf3PopGYjcUu4eGgPDAe085YWcsvcvWk0ny8Q,310
99
+ golf/telemetry/__init__.py,sha256=txSXDBhug5uVMD1KjZszcILMrVTjvTCWlxo7TWwbul8,506
100
+ golf/telemetry/instrumentation.py,sha256=kLWkvw14eCUVawNtGuRRzEqaVcwzLJxk86uvDqW_tOU,57771
101
+ golf/utilities/__init__.py,sha256=X9iY9yi3agz1GVcn8-qWeOCt8CSSsruHxqPNtiF63TY,530
102
+ golf/utilities/context.py,sha256=DGGvhVe---QMhy0wtdWhNp-_WVk1NvAcOFn0uBKBpYo,1579
103
+ golf/utilities/elicitation.py,sha256=MParZZZsY45s70-KXduHa6IvpWXnLW2FCPfrGijMaHs,5223
104
+ golf/utilities/sampling.py,sha256=88nDv-trBE4gZQbcnMjXl3LW6TiIhv5zR_cuEIGjaIM,7233
105
+ golf_mcp-0.2.0.dist-info/licenses/LICENSE,sha256=5_j2f6fTJmvfmUewzElhkpAaXg2grVoxKouOA8ihV6E,11348
106
+ golf_mcp-0.2.0.dist-info/METADATA,sha256=wzkgbT10S4pNMFXLjYwm9KvzGs0g-GcBDeCyxkdGt2g,9558
107
+ golf_mcp-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
+ golf_mcp-0.2.0.dist-info/entry_points.txt,sha256=5y7rHYM8jGpU-nfwdknCm5XsApLulqsnA37MO6BUTYg,43
109
+ golf_mcp-0.2.0.dist-info/top_level.txt,sha256=BQToHcBUufdyhp9ONGMIvPE40jMEtmI20lYaKb4hxOg,5
110
+ golf_mcp-0.2.0.dist-info/RECORD,,