letta-client 1.0.0a11__py3-none-any.whl → 1.0.0a12__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 letta-client might be problematic. Click here for more details.

Files changed (36) hide show
  1. letta_client/_client.py +23 -0
  2. letta_client/_streaming.py +4 -6
  3. letta_client/_version.py +1 -1
  4. letta_client/resources/__init__.py +14 -0
  5. letta_client/resources/agents/agents.py +0 -8
  6. letta_client/resources/groups/groups.py +1 -17
  7. letta_client/resources/identities/identities.py +1 -17
  8. letta_client/resources/mcp_servers/__init__.py +47 -0
  9. letta_client/resources/mcp_servers/mcp_servers.py +1165 -0
  10. letta_client/resources/mcp_servers/refresh.py +192 -0
  11. letta_client/resources/mcp_servers/tools.py +351 -0
  12. letta_client/resources/steps/steps.py +1 -9
  13. letta_client/resources/tools.py +4 -4
  14. letta_client/types/__init__.py +6 -0
  15. letta_client/types/agent_create_params.py +1 -5
  16. letta_client/types/group_create_params.py +1 -5
  17. letta_client/types/group_modify_params.py +1 -5
  18. letta_client/types/identity_create_params.py +1 -5
  19. letta_client/types/identity_upsert_params.py +1 -5
  20. letta_client/types/mcp_server_create_params.py +67 -0
  21. letta_client/types/mcp_server_create_response.py +74 -0
  22. letta_client/types/mcp_server_list_response.py +86 -0
  23. letta_client/types/mcp_server_modify_params.py +76 -0
  24. letta_client/types/mcp_server_modify_response.py +74 -0
  25. letta_client/types/mcp_server_retrieve_response.py +74 -0
  26. letta_client/types/mcp_servers/__init__.py +8 -0
  27. letta_client/types/mcp_servers/refresh_trigger_params.py +12 -0
  28. letta_client/types/mcp_servers/tool_list_response.py +10 -0
  29. letta_client/types/mcp_servers/tool_run_params.py +15 -0
  30. letta_client/types/mcp_servers/tool_run_response.py +43 -0
  31. letta_client/types/step_list_params.py +1 -5
  32. letta_client/types/tool.py +4 -4
  33. {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/METADATA +1 -1
  34. {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/RECORD +36 -21
  35. {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/WHEEL +0 -0
  36. {letta_client-1.0.0a11.dist-info → letta_client-1.0.0a12.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1165 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Dict, Optional, cast
6
+ from typing_extensions import Literal, overload
7
+
8
+ import httpx
9
+
10
+ from .tools import (
11
+ ToolsResource,
12
+ AsyncToolsResource,
13
+ ToolsResourceWithRawResponse,
14
+ AsyncToolsResourceWithRawResponse,
15
+ ToolsResourceWithStreamingResponse,
16
+ AsyncToolsResourceWithStreamingResponse,
17
+ )
18
+ from ...types import mcp_server_create_params, mcp_server_modify_params
19
+ from .refresh import (
20
+ RefreshResource,
21
+ AsyncRefreshResource,
22
+ RefreshResourceWithRawResponse,
23
+ AsyncRefreshResourceWithRawResponse,
24
+ RefreshResourceWithStreamingResponse,
25
+ AsyncRefreshResourceWithStreamingResponse,
26
+ )
27
+ from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
28
+ from ..._utils import required_args, maybe_transform, async_maybe_transform
29
+ from ..._compat import cached_property
30
+ from ..._resource import SyncAPIResource, AsyncAPIResource
31
+ from ..._response import (
32
+ to_raw_response_wrapper,
33
+ to_streamed_response_wrapper,
34
+ async_to_raw_response_wrapper,
35
+ async_to_streamed_response_wrapper,
36
+ )
37
+ from ..._base_client import make_request_options
38
+ from ...types.mcp_server_list_response import McpServerListResponse
39
+ from ...types.mcp_server_create_response import McpServerCreateResponse
40
+ from ...types.mcp_server_modify_response import McpServerModifyResponse
41
+ from ...types.mcp_server_retrieve_response import McpServerRetrieveResponse
42
+
43
+ __all__ = ["McpServersResource", "AsyncMcpServersResource"]
44
+
45
+
46
+ class McpServersResource(SyncAPIResource):
47
+ @cached_property
48
+ def tools(self) -> ToolsResource:
49
+ return ToolsResource(self._client)
50
+
51
+ @cached_property
52
+ def refresh(self) -> RefreshResource:
53
+ return RefreshResource(self._client)
54
+
55
+ @cached_property
56
+ def with_raw_response(self) -> McpServersResourceWithRawResponse:
57
+ """
58
+ This property can be used as a prefix for any HTTP method call to return
59
+ the raw response object instead of the parsed content.
60
+
61
+ For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
62
+ """
63
+ return McpServersResourceWithRawResponse(self)
64
+
65
+ @cached_property
66
+ def with_streaming_response(self) -> McpServersResourceWithStreamingResponse:
67
+ """
68
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
69
+
70
+ For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
71
+ """
72
+ return McpServersResourceWithStreamingResponse(self)
73
+
74
+ @overload
75
+ def create(
76
+ self,
77
+ *,
78
+ args: SequenceNotStr[str],
79
+ command: str,
80
+ server_name: str,
81
+ env: Optional[Dict[str, str]] | Omit = omit,
82
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
83
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
84
+ # The extra values given here take precedence over values defined on the client or passed to this method.
85
+ extra_headers: Headers | None = None,
86
+ extra_query: Query | None = None,
87
+ extra_body: Body | None = None,
88
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
89
+ ) -> McpServerCreateResponse:
90
+ """
91
+ Add a new MCP server to the Letta MCP server config
92
+
93
+ Args:
94
+ args: The arguments to pass to the command
95
+
96
+ command: The command to run (MCP 'local' client will run this command)
97
+
98
+ server_name: The name of the server
99
+
100
+ env: Environment variables to set
101
+
102
+ extra_headers: Send extra headers
103
+
104
+ extra_query: Add additional query parameters to the request
105
+
106
+ extra_body: Add additional JSON properties to the request
107
+
108
+ timeout: Override the client-level default timeout for this request, in seconds
109
+ """
110
+ ...
111
+
112
+ @overload
113
+ def create(
114
+ self,
115
+ *,
116
+ server_name: str,
117
+ server_url: str,
118
+ auth_header: Optional[str] | Omit = omit,
119
+ auth_token: Optional[str] | Omit = omit,
120
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
121
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
122
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
123
+ # The extra values given here take precedence over values defined on the client or passed to this method.
124
+ extra_headers: Headers | None = None,
125
+ extra_query: Query | None = None,
126
+ extra_body: Body | None = None,
127
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
128
+ ) -> McpServerCreateResponse:
129
+ """
130
+ Add a new MCP server to the Letta MCP server config
131
+
132
+ Args:
133
+ server_name: The name of the server
134
+
135
+ server_url: The URL of the server
136
+
137
+ auth_header: The name of the authentication header (e.g., 'Authorization')
138
+
139
+ auth_token: The authentication token or API key value
140
+
141
+ custom_headers: Custom HTTP headers to include with requests
142
+
143
+ extra_headers: Send extra headers
144
+
145
+ extra_query: Add additional query parameters to the request
146
+
147
+ extra_body: Add additional JSON properties to the request
148
+
149
+ timeout: Override the client-level default timeout for this request, in seconds
150
+ """
151
+ ...
152
+
153
+ @overload
154
+ def create(
155
+ self,
156
+ *,
157
+ server_name: str,
158
+ server_url: str,
159
+ auth_header: Optional[str] | Omit = omit,
160
+ auth_token: Optional[str] | Omit = omit,
161
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
162
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
163
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
164
+ # The extra values given here take precedence over values defined on the client or passed to this method.
165
+ extra_headers: Headers | None = None,
166
+ extra_query: Query | None = None,
167
+ extra_body: Body | None = None,
168
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
169
+ ) -> McpServerCreateResponse:
170
+ """
171
+ Add a new MCP server to the Letta MCP server config
172
+
173
+ Args:
174
+ server_name: The name of the server
175
+
176
+ server_url: The URL of the server
177
+
178
+ auth_header: The name of the authentication header (e.g., 'Authorization')
179
+
180
+ auth_token: The authentication token or API key value
181
+
182
+ custom_headers: Custom HTTP headers to include with requests
183
+
184
+ extra_headers: Send extra headers
185
+
186
+ extra_query: Add additional query parameters to the request
187
+
188
+ extra_body: Add additional JSON properties to the request
189
+
190
+ timeout: Override the client-level default timeout for this request, in seconds
191
+ """
192
+ ...
193
+
194
+ @required_args(["args", "command", "server_name"], ["server_name", "server_url"])
195
+ def create(
196
+ self,
197
+ *,
198
+ args: SequenceNotStr[str] | Omit = omit,
199
+ command: str | Omit = omit,
200
+ server_name: str,
201
+ env: Optional[Dict[str, str]] | Omit = omit,
202
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
203
+ server_url: str | Omit = omit,
204
+ auth_header: Optional[str] | Omit = omit,
205
+ auth_token: Optional[str] | Omit = omit,
206
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
207
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
208
+ # The extra values given here take precedence over values defined on the client or passed to this method.
209
+ extra_headers: Headers | None = None,
210
+ extra_query: Query | None = None,
211
+ extra_body: Body | None = None,
212
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
213
+ ) -> McpServerCreateResponse:
214
+ return cast(
215
+ McpServerCreateResponse,
216
+ self._post(
217
+ "/v1/mcp-servers/",
218
+ body=maybe_transform(
219
+ {
220
+ "args": args,
221
+ "command": command,
222
+ "server_name": server_name,
223
+ "env": env,
224
+ "type": type,
225
+ "server_url": server_url,
226
+ "auth_header": auth_header,
227
+ "auth_token": auth_token,
228
+ "custom_headers": custom_headers,
229
+ },
230
+ mcp_server_create_params.McpServerCreateParams,
231
+ ),
232
+ options=make_request_options(
233
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
234
+ ),
235
+ cast_to=cast(
236
+ Any, McpServerCreateResponse
237
+ ), # Union types cannot be passed in as arguments in the type system
238
+ ),
239
+ )
240
+
241
+ def retrieve(
242
+ self,
243
+ mcp_server_id: str,
244
+ *,
245
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
246
+ # The extra values given here take precedence over values defined on the client or passed to this method.
247
+ extra_headers: Headers | None = None,
248
+ extra_query: Query | None = None,
249
+ extra_body: Body | None = None,
250
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
251
+ ) -> McpServerRetrieveResponse:
252
+ """
253
+ Get a specific MCP server
254
+
255
+ Args:
256
+ extra_headers: Send extra headers
257
+
258
+ extra_query: Add additional query parameters to the request
259
+
260
+ extra_body: Add additional JSON properties to the request
261
+
262
+ timeout: Override the client-level default timeout for this request, in seconds
263
+ """
264
+ if not mcp_server_id:
265
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
266
+ return cast(
267
+ McpServerRetrieveResponse,
268
+ self._get(
269
+ f"/v1/mcp-servers/{mcp_server_id}",
270
+ options=make_request_options(
271
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
272
+ ),
273
+ cast_to=cast(
274
+ Any, McpServerRetrieveResponse
275
+ ), # Union types cannot be passed in as arguments in the type system
276
+ ),
277
+ )
278
+
279
+ def list(
280
+ self,
281
+ *,
282
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
283
+ # The extra values given here take precedence over values defined on the client or passed to this method.
284
+ extra_headers: Headers | None = None,
285
+ extra_query: Query | None = None,
286
+ extra_body: Body | None = None,
287
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
288
+ ) -> McpServerListResponse:
289
+ """Get a list of all configured MCP servers"""
290
+ return self._get(
291
+ "/v1/mcp-servers/",
292
+ options=make_request_options(
293
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
294
+ ),
295
+ cast_to=McpServerListResponse,
296
+ )
297
+
298
+ def delete(
299
+ self,
300
+ mcp_server_id: str,
301
+ *,
302
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
303
+ # The extra values given here take precedence over values defined on the client or passed to this method.
304
+ extra_headers: Headers | None = None,
305
+ extra_query: Query | None = None,
306
+ extra_body: Body | None = None,
307
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
308
+ ) -> None:
309
+ """
310
+ Delete an MCP server by its ID
311
+
312
+ Args:
313
+ extra_headers: Send extra headers
314
+
315
+ extra_query: Add additional query parameters to the request
316
+
317
+ extra_body: Add additional JSON properties to the request
318
+
319
+ timeout: Override the client-level default timeout for this request, in seconds
320
+ """
321
+ if not mcp_server_id:
322
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
323
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
324
+ return self._delete(
325
+ f"/v1/mcp-servers/{mcp_server_id}",
326
+ options=make_request_options(
327
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
328
+ ),
329
+ cast_to=NoneType,
330
+ )
331
+
332
+ def connect(
333
+ self,
334
+ mcp_server_id: str,
335
+ *,
336
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
337
+ # The extra values given here take precedence over values defined on the client or passed to this method.
338
+ extra_headers: Headers | None = None,
339
+ extra_query: Query | None = None,
340
+ extra_body: Body | None = None,
341
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
342
+ ) -> object:
343
+ """Connect to an MCP server with support for OAuth via SSE.
344
+
345
+ Returns a stream of
346
+ events handling authorization state and exchange if OAuth is required.
347
+
348
+ Args:
349
+ extra_headers: Send extra headers
350
+
351
+ extra_query: Add additional query parameters to the request
352
+
353
+ extra_body: Add additional JSON properties to the request
354
+
355
+ timeout: Override the client-level default timeout for this request, in seconds
356
+ """
357
+ if not mcp_server_id:
358
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
359
+ return self._get(
360
+ f"/v1/mcp-servers/connect/{mcp_server_id}",
361
+ options=make_request_options(
362
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
363
+ ),
364
+ cast_to=object,
365
+ )
366
+
367
+ @overload
368
+ def modify(
369
+ self,
370
+ mcp_server_id: str,
371
+ *,
372
+ args: Optional[SequenceNotStr[str]] | Omit = omit,
373
+ command: Optional[str] | Omit = omit,
374
+ env: Optional[Dict[str, str]] | Omit = omit,
375
+ server_name: Optional[str] | Omit = omit,
376
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
377
+ # The extra values given here take precedence over values defined on the client or passed to this method.
378
+ extra_headers: Headers | None = None,
379
+ extra_query: Query | None = None,
380
+ extra_body: Body | None = None,
381
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
382
+ ) -> McpServerModifyResponse:
383
+ """
384
+ Update an existing MCP server configuration
385
+
386
+ Args:
387
+ args: The arguments to pass to the command
388
+
389
+ command: The command to run the MCP server
390
+
391
+ env: Environment variables to set
392
+
393
+ server_name: The name of the MCP server
394
+
395
+ extra_headers: Send extra headers
396
+
397
+ extra_query: Add additional query parameters to the request
398
+
399
+ extra_body: Add additional JSON properties to the request
400
+
401
+ timeout: Override the client-level default timeout for this request, in seconds
402
+ """
403
+ ...
404
+
405
+ @overload
406
+ def modify(
407
+ self,
408
+ mcp_server_id: str,
409
+ *,
410
+ token: Optional[str] | Omit = omit,
411
+ auth_header: Optional[str] | Omit = omit,
412
+ auth_token: Optional[str] | Omit = omit,
413
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
414
+ server_name: Optional[str] | Omit = omit,
415
+ server_url: Optional[str] | Omit = omit,
416
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
417
+ # The extra values given here take precedence over values defined on the client or passed to this method.
418
+ extra_headers: Headers | None = None,
419
+ extra_query: Query | None = None,
420
+ extra_body: Body | None = None,
421
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
422
+ ) -> McpServerModifyResponse:
423
+ """
424
+ Update an existing MCP server configuration
425
+
426
+ Args:
427
+ token: The authentication token (internal)
428
+
429
+ auth_header: The name of the authentication header (e.g., 'Authorization')
430
+
431
+ auth_token: The authentication token or API key value
432
+
433
+ custom_headers: Custom headers to send with requests
434
+
435
+ server_name: The name of the MCP server
436
+
437
+ server_url: The URL of the SSE MCP server
438
+
439
+ extra_headers: Send extra headers
440
+
441
+ extra_query: Add additional query parameters to the request
442
+
443
+ extra_body: Add additional JSON properties to the request
444
+
445
+ timeout: Override the client-level default timeout for this request, in seconds
446
+ """
447
+ ...
448
+
449
+ @overload
450
+ def modify(
451
+ self,
452
+ mcp_server_id: str,
453
+ *,
454
+ token: Optional[str] | Omit = omit,
455
+ auth_header: Optional[str] | Omit = omit,
456
+ auth_token: Optional[str] | Omit = omit,
457
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
458
+ server_name: Optional[str] | Omit = omit,
459
+ server_url: Optional[str] | Omit = omit,
460
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
461
+ # The extra values given here take precedence over values defined on the client or passed to this method.
462
+ extra_headers: Headers | None = None,
463
+ extra_query: Query | None = None,
464
+ extra_body: Body | None = None,
465
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
466
+ ) -> McpServerModifyResponse:
467
+ """
468
+ Update an existing MCP server configuration
469
+
470
+ Args:
471
+ token: The authentication token (internal)
472
+
473
+ auth_header: The name of the authentication header (e.g., 'Authorization')
474
+
475
+ auth_token: The authentication token or API key value
476
+
477
+ custom_headers: Custom headers to send with requests
478
+
479
+ server_name: The name of the MCP server
480
+
481
+ server_url: The URL of the Streamable HTTP MCP server
482
+
483
+ extra_headers: Send extra headers
484
+
485
+ extra_query: Add additional query parameters to the request
486
+
487
+ extra_body: Add additional JSON properties to the request
488
+
489
+ timeout: Override the client-level default timeout for this request, in seconds
490
+ """
491
+ ...
492
+
493
+ def modify(
494
+ self,
495
+ mcp_server_id: str,
496
+ *,
497
+ args: Optional[SequenceNotStr[str]] | Omit = omit,
498
+ command: Optional[str] | Omit = omit,
499
+ env: Optional[Dict[str, str]] | Omit = omit,
500
+ server_name: Optional[str] | Omit = omit,
501
+ token: Optional[str] | Omit = omit,
502
+ auth_header: Optional[str] | Omit = omit,
503
+ auth_token: Optional[str] | Omit = omit,
504
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
505
+ server_url: Optional[str] | Omit = omit,
506
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
507
+ # The extra values given here take precedence over values defined on the client or passed to this method.
508
+ extra_headers: Headers | None = None,
509
+ extra_query: Query | None = None,
510
+ extra_body: Body | None = None,
511
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
512
+ ) -> McpServerModifyResponse:
513
+ if not mcp_server_id:
514
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
515
+ return cast(
516
+ McpServerModifyResponse,
517
+ self._patch(
518
+ f"/v1/mcp-servers/{mcp_server_id}",
519
+ body=maybe_transform(
520
+ {
521
+ "args": args,
522
+ "command": command,
523
+ "env": env,
524
+ "server_name": server_name,
525
+ "token": token,
526
+ "auth_header": auth_header,
527
+ "auth_token": auth_token,
528
+ "custom_headers": custom_headers,
529
+ "server_url": server_url,
530
+ },
531
+ mcp_server_modify_params.McpServerModifyParams,
532
+ ),
533
+ options=make_request_options(
534
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
535
+ ),
536
+ cast_to=cast(
537
+ Any, McpServerModifyResponse
538
+ ), # Union types cannot be passed in as arguments in the type system
539
+ ),
540
+ )
541
+
542
+
543
+ class AsyncMcpServersResource(AsyncAPIResource):
544
+ @cached_property
545
+ def tools(self) -> AsyncToolsResource:
546
+ return AsyncToolsResource(self._client)
547
+
548
+ @cached_property
549
+ def refresh(self) -> AsyncRefreshResource:
550
+ return AsyncRefreshResource(self._client)
551
+
552
+ @cached_property
553
+ def with_raw_response(self) -> AsyncMcpServersResourceWithRawResponse:
554
+ """
555
+ This property can be used as a prefix for any HTTP method call to return
556
+ the raw response object instead of the parsed content.
557
+
558
+ For more information, see https://www.github.com/letta-ai/letta-python#accessing-raw-response-data-eg-headers
559
+ """
560
+ return AsyncMcpServersResourceWithRawResponse(self)
561
+
562
+ @cached_property
563
+ def with_streaming_response(self) -> AsyncMcpServersResourceWithStreamingResponse:
564
+ """
565
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
566
+
567
+ For more information, see https://www.github.com/letta-ai/letta-python#with_streaming_response
568
+ """
569
+ return AsyncMcpServersResourceWithStreamingResponse(self)
570
+
571
+ @overload
572
+ async def create(
573
+ self,
574
+ *,
575
+ args: SequenceNotStr[str],
576
+ command: str,
577
+ server_name: str,
578
+ env: Optional[Dict[str, str]] | Omit = omit,
579
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
580
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
581
+ # The extra values given here take precedence over values defined on the client or passed to this method.
582
+ extra_headers: Headers | None = None,
583
+ extra_query: Query | None = None,
584
+ extra_body: Body | None = None,
585
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
586
+ ) -> McpServerCreateResponse:
587
+ """
588
+ Add a new MCP server to the Letta MCP server config
589
+
590
+ Args:
591
+ args: The arguments to pass to the command
592
+
593
+ command: The command to run (MCP 'local' client will run this command)
594
+
595
+ server_name: The name of the server
596
+
597
+ env: Environment variables to set
598
+
599
+ extra_headers: Send extra headers
600
+
601
+ extra_query: Add additional query parameters to the request
602
+
603
+ extra_body: Add additional JSON properties to the request
604
+
605
+ timeout: Override the client-level default timeout for this request, in seconds
606
+ """
607
+ ...
608
+
609
+ @overload
610
+ async def create(
611
+ self,
612
+ *,
613
+ server_name: str,
614
+ server_url: str,
615
+ auth_header: Optional[str] | Omit = omit,
616
+ auth_token: Optional[str] | Omit = omit,
617
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
618
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
619
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
620
+ # The extra values given here take precedence over values defined on the client or passed to this method.
621
+ extra_headers: Headers | None = None,
622
+ extra_query: Query | None = None,
623
+ extra_body: Body | None = None,
624
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
625
+ ) -> McpServerCreateResponse:
626
+ """
627
+ Add a new MCP server to the Letta MCP server config
628
+
629
+ Args:
630
+ server_name: The name of the server
631
+
632
+ server_url: The URL of the server
633
+
634
+ auth_header: The name of the authentication header (e.g., 'Authorization')
635
+
636
+ auth_token: The authentication token or API key value
637
+
638
+ custom_headers: Custom HTTP headers to include with requests
639
+
640
+ extra_headers: Send extra headers
641
+
642
+ extra_query: Add additional query parameters to the request
643
+
644
+ extra_body: Add additional JSON properties to the request
645
+
646
+ timeout: Override the client-level default timeout for this request, in seconds
647
+ """
648
+ ...
649
+
650
+ @overload
651
+ async def create(
652
+ self,
653
+ *,
654
+ server_name: str,
655
+ server_url: str,
656
+ auth_header: Optional[str] | Omit = omit,
657
+ auth_token: Optional[str] | Omit = omit,
658
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
659
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
660
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
661
+ # The extra values given here take precedence over values defined on the client or passed to this method.
662
+ extra_headers: Headers | None = None,
663
+ extra_query: Query | None = None,
664
+ extra_body: Body | None = None,
665
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
666
+ ) -> McpServerCreateResponse:
667
+ """
668
+ Add a new MCP server to the Letta MCP server config
669
+
670
+ Args:
671
+ server_name: The name of the server
672
+
673
+ server_url: The URL of the server
674
+
675
+ auth_header: The name of the authentication header (e.g., 'Authorization')
676
+
677
+ auth_token: The authentication token or API key value
678
+
679
+ custom_headers: Custom HTTP headers to include with requests
680
+
681
+ extra_headers: Send extra headers
682
+
683
+ extra_query: Add additional query parameters to the request
684
+
685
+ extra_body: Add additional JSON properties to the request
686
+
687
+ timeout: Override the client-level default timeout for this request, in seconds
688
+ """
689
+ ...
690
+
691
+ @required_args(["args", "command", "server_name"], ["server_name", "server_url"])
692
+ async def create(
693
+ self,
694
+ *,
695
+ args: SequenceNotStr[str] | Omit = omit,
696
+ command: str | Omit = omit,
697
+ server_name: str,
698
+ env: Optional[Dict[str, str]] | Omit = omit,
699
+ type: Literal["sse", "stdio", "streamable_http"] | Omit = omit,
700
+ server_url: str | Omit = omit,
701
+ auth_header: Optional[str] | Omit = omit,
702
+ auth_token: Optional[str] | Omit = omit,
703
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
704
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
705
+ # The extra values given here take precedence over values defined on the client or passed to this method.
706
+ extra_headers: Headers | None = None,
707
+ extra_query: Query | None = None,
708
+ extra_body: Body | None = None,
709
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
710
+ ) -> McpServerCreateResponse:
711
+ return cast(
712
+ McpServerCreateResponse,
713
+ await self._post(
714
+ "/v1/mcp-servers/",
715
+ body=await async_maybe_transform(
716
+ {
717
+ "args": args,
718
+ "command": command,
719
+ "server_name": server_name,
720
+ "env": env,
721
+ "type": type,
722
+ "server_url": server_url,
723
+ "auth_header": auth_header,
724
+ "auth_token": auth_token,
725
+ "custom_headers": custom_headers,
726
+ },
727
+ mcp_server_create_params.McpServerCreateParams,
728
+ ),
729
+ options=make_request_options(
730
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
731
+ ),
732
+ cast_to=cast(
733
+ Any, McpServerCreateResponse
734
+ ), # Union types cannot be passed in as arguments in the type system
735
+ ),
736
+ )
737
+
738
+ async def retrieve(
739
+ self,
740
+ mcp_server_id: str,
741
+ *,
742
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
743
+ # The extra values given here take precedence over values defined on the client or passed to this method.
744
+ extra_headers: Headers | None = None,
745
+ extra_query: Query | None = None,
746
+ extra_body: Body | None = None,
747
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
748
+ ) -> McpServerRetrieveResponse:
749
+ """
750
+ Get a specific MCP server
751
+
752
+ Args:
753
+ extra_headers: Send extra headers
754
+
755
+ extra_query: Add additional query parameters to the request
756
+
757
+ extra_body: Add additional JSON properties to the request
758
+
759
+ timeout: Override the client-level default timeout for this request, in seconds
760
+ """
761
+ if not mcp_server_id:
762
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
763
+ return cast(
764
+ McpServerRetrieveResponse,
765
+ await self._get(
766
+ f"/v1/mcp-servers/{mcp_server_id}",
767
+ options=make_request_options(
768
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
769
+ ),
770
+ cast_to=cast(
771
+ Any, McpServerRetrieveResponse
772
+ ), # Union types cannot be passed in as arguments in the type system
773
+ ),
774
+ )
775
+
776
+ async def list(
777
+ self,
778
+ *,
779
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
780
+ # The extra values given here take precedence over values defined on the client or passed to this method.
781
+ extra_headers: Headers | None = None,
782
+ extra_query: Query | None = None,
783
+ extra_body: Body | None = None,
784
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
785
+ ) -> McpServerListResponse:
786
+ """Get a list of all configured MCP servers"""
787
+ return await self._get(
788
+ "/v1/mcp-servers/",
789
+ options=make_request_options(
790
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
791
+ ),
792
+ cast_to=McpServerListResponse,
793
+ )
794
+
795
+ async def delete(
796
+ self,
797
+ mcp_server_id: str,
798
+ *,
799
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
800
+ # The extra values given here take precedence over values defined on the client or passed to this method.
801
+ extra_headers: Headers | None = None,
802
+ extra_query: Query | None = None,
803
+ extra_body: Body | None = None,
804
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
805
+ ) -> None:
806
+ """
807
+ Delete an MCP server by its ID
808
+
809
+ Args:
810
+ extra_headers: Send extra headers
811
+
812
+ extra_query: Add additional query parameters to the request
813
+
814
+ extra_body: Add additional JSON properties to the request
815
+
816
+ timeout: Override the client-level default timeout for this request, in seconds
817
+ """
818
+ if not mcp_server_id:
819
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
820
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
821
+ return await self._delete(
822
+ f"/v1/mcp-servers/{mcp_server_id}",
823
+ options=make_request_options(
824
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
825
+ ),
826
+ cast_to=NoneType,
827
+ )
828
+
829
+ async def connect(
830
+ self,
831
+ mcp_server_id: str,
832
+ *,
833
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
834
+ # The extra values given here take precedence over values defined on the client or passed to this method.
835
+ extra_headers: Headers | None = None,
836
+ extra_query: Query | None = None,
837
+ extra_body: Body | None = None,
838
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
839
+ ) -> object:
840
+ """Connect to an MCP server with support for OAuth via SSE.
841
+
842
+ Returns a stream of
843
+ events handling authorization state and exchange if OAuth is required.
844
+
845
+ Args:
846
+ extra_headers: Send extra headers
847
+
848
+ extra_query: Add additional query parameters to the request
849
+
850
+ extra_body: Add additional JSON properties to the request
851
+
852
+ timeout: Override the client-level default timeout for this request, in seconds
853
+ """
854
+ if not mcp_server_id:
855
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
856
+ return await self._get(
857
+ f"/v1/mcp-servers/connect/{mcp_server_id}",
858
+ options=make_request_options(
859
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
860
+ ),
861
+ cast_to=object,
862
+ )
863
+
864
+ @overload
865
+ async def modify(
866
+ self,
867
+ mcp_server_id: str,
868
+ *,
869
+ args: Optional[SequenceNotStr[str]] | Omit = omit,
870
+ command: Optional[str] | Omit = omit,
871
+ env: Optional[Dict[str, str]] | Omit = omit,
872
+ server_name: Optional[str] | Omit = omit,
873
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
874
+ # The extra values given here take precedence over values defined on the client or passed to this method.
875
+ extra_headers: Headers | None = None,
876
+ extra_query: Query | None = None,
877
+ extra_body: Body | None = None,
878
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
879
+ ) -> McpServerModifyResponse:
880
+ """
881
+ Update an existing MCP server configuration
882
+
883
+ Args:
884
+ args: The arguments to pass to the command
885
+
886
+ command: The command to run the MCP server
887
+
888
+ env: Environment variables to set
889
+
890
+ server_name: The name of the MCP server
891
+
892
+ extra_headers: Send extra headers
893
+
894
+ extra_query: Add additional query parameters to the request
895
+
896
+ extra_body: Add additional JSON properties to the request
897
+
898
+ timeout: Override the client-level default timeout for this request, in seconds
899
+ """
900
+ ...
901
+
902
+ @overload
903
+ async def modify(
904
+ self,
905
+ mcp_server_id: str,
906
+ *,
907
+ token: Optional[str] | Omit = omit,
908
+ auth_header: Optional[str] | Omit = omit,
909
+ auth_token: Optional[str] | Omit = omit,
910
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
911
+ server_name: Optional[str] | Omit = omit,
912
+ server_url: Optional[str] | Omit = omit,
913
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
914
+ # The extra values given here take precedence over values defined on the client or passed to this method.
915
+ extra_headers: Headers | None = None,
916
+ extra_query: Query | None = None,
917
+ extra_body: Body | None = None,
918
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
919
+ ) -> McpServerModifyResponse:
920
+ """
921
+ Update an existing MCP server configuration
922
+
923
+ Args:
924
+ token: The authentication token (internal)
925
+
926
+ auth_header: The name of the authentication header (e.g., 'Authorization')
927
+
928
+ auth_token: The authentication token or API key value
929
+
930
+ custom_headers: Custom headers to send with requests
931
+
932
+ server_name: The name of the MCP server
933
+
934
+ server_url: The URL of the SSE MCP server
935
+
936
+ extra_headers: Send extra headers
937
+
938
+ extra_query: Add additional query parameters to the request
939
+
940
+ extra_body: Add additional JSON properties to the request
941
+
942
+ timeout: Override the client-level default timeout for this request, in seconds
943
+ """
944
+ ...
945
+
946
+ @overload
947
+ async def modify(
948
+ self,
949
+ mcp_server_id: str,
950
+ *,
951
+ token: Optional[str] | Omit = omit,
952
+ auth_header: Optional[str] | Omit = omit,
953
+ auth_token: Optional[str] | Omit = omit,
954
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
955
+ server_name: Optional[str] | Omit = omit,
956
+ server_url: Optional[str] | Omit = omit,
957
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
958
+ # The extra values given here take precedence over values defined on the client or passed to this method.
959
+ extra_headers: Headers | None = None,
960
+ extra_query: Query | None = None,
961
+ extra_body: Body | None = None,
962
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
963
+ ) -> McpServerModifyResponse:
964
+ """
965
+ Update an existing MCP server configuration
966
+
967
+ Args:
968
+ token: The authentication token (internal)
969
+
970
+ auth_header: The name of the authentication header (e.g., 'Authorization')
971
+
972
+ auth_token: The authentication token or API key value
973
+
974
+ custom_headers: Custom headers to send with requests
975
+
976
+ server_name: The name of the MCP server
977
+
978
+ server_url: The URL of the Streamable HTTP MCP server
979
+
980
+ extra_headers: Send extra headers
981
+
982
+ extra_query: Add additional query parameters to the request
983
+
984
+ extra_body: Add additional JSON properties to the request
985
+
986
+ timeout: Override the client-level default timeout for this request, in seconds
987
+ """
988
+ ...
989
+
990
+ async def modify(
991
+ self,
992
+ mcp_server_id: str,
993
+ *,
994
+ args: Optional[SequenceNotStr[str]] | Omit = omit,
995
+ command: Optional[str] | Omit = omit,
996
+ env: Optional[Dict[str, str]] | Omit = omit,
997
+ server_name: Optional[str] | Omit = omit,
998
+ token: Optional[str] | Omit = omit,
999
+ auth_header: Optional[str] | Omit = omit,
1000
+ auth_token: Optional[str] | Omit = omit,
1001
+ custom_headers: Optional[Dict[str, str]] | Omit = omit,
1002
+ server_url: Optional[str] | Omit = omit,
1003
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1004
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1005
+ extra_headers: Headers | None = None,
1006
+ extra_query: Query | None = None,
1007
+ extra_body: Body | None = None,
1008
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
1009
+ ) -> McpServerModifyResponse:
1010
+ if not mcp_server_id:
1011
+ raise ValueError(f"Expected a non-empty value for `mcp_server_id` but received {mcp_server_id!r}")
1012
+ return cast(
1013
+ McpServerModifyResponse,
1014
+ await self._patch(
1015
+ f"/v1/mcp-servers/{mcp_server_id}",
1016
+ body=await async_maybe_transform(
1017
+ {
1018
+ "args": args,
1019
+ "command": command,
1020
+ "env": env,
1021
+ "server_name": server_name,
1022
+ "token": token,
1023
+ "auth_header": auth_header,
1024
+ "auth_token": auth_token,
1025
+ "custom_headers": custom_headers,
1026
+ "server_url": server_url,
1027
+ },
1028
+ mcp_server_modify_params.McpServerModifyParams,
1029
+ ),
1030
+ options=make_request_options(
1031
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1032
+ ),
1033
+ cast_to=cast(
1034
+ Any, McpServerModifyResponse
1035
+ ), # Union types cannot be passed in as arguments in the type system
1036
+ ),
1037
+ )
1038
+
1039
+
1040
+ class McpServersResourceWithRawResponse:
1041
+ def __init__(self, mcp_servers: McpServersResource) -> None:
1042
+ self._mcp_servers = mcp_servers
1043
+
1044
+ self.create = to_raw_response_wrapper(
1045
+ mcp_servers.create,
1046
+ )
1047
+ self.retrieve = to_raw_response_wrapper(
1048
+ mcp_servers.retrieve,
1049
+ )
1050
+ self.list = to_raw_response_wrapper(
1051
+ mcp_servers.list,
1052
+ )
1053
+ self.delete = to_raw_response_wrapper(
1054
+ mcp_servers.delete,
1055
+ )
1056
+ self.connect = to_raw_response_wrapper(
1057
+ mcp_servers.connect,
1058
+ )
1059
+ self.modify = to_raw_response_wrapper(
1060
+ mcp_servers.modify,
1061
+ )
1062
+
1063
+ @cached_property
1064
+ def tools(self) -> ToolsResourceWithRawResponse:
1065
+ return ToolsResourceWithRawResponse(self._mcp_servers.tools)
1066
+
1067
+ @cached_property
1068
+ def refresh(self) -> RefreshResourceWithRawResponse:
1069
+ return RefreshResourceWithRawResponse(self._mcp_servers.refresh)
1070
+
1071
+
1072
+ class AsyncMcpServersResourceWithRawResponse:
1073
+ def __init__(self, mcp_servers: AsyncMcpServersResource) -> None:
1074
+ self._mcp_servers = mcp_servers
1075
+
1076
+ self.create = async_to_raw_response_wrapper(
1077
+ mcp_servers.create,
1078
+ )
1079
+ self.retrieve = async_to_raw_response_wrapper(
1080
+ mcp_servers.retrieve,
1081
+ )
1082
+ self.list = async_to_raw_response_wrapper(
1083
+ mcp_servers.list,
1084
+ )
1085
+ self.delete = async_to_raw_response_wrapper(
1086
+ mcp_servers.delete,
1087
+ )
1088
+ self.connect = async_to_raw_response_wrapper(
1089
+ mcp_servers.connect,
1090
+ )
1091
+ self.modify = async_to_raw_response_wrapper(
1092
+ mcp_servers.modify,
1093
+ )
1094
+
1095
+ @cached_property
1096
+ def tools(self) -> AsyncToolsResourceWithRawResponse:
1097
+ return AsyncToolsResourceWithRawResponse(self._mcp_servers.tools)
1098
+
1099
+ @cached_property
1100
+ def refresh(self) -> AsyncRefreshResourceWithRawResponse:
1101
+ return AsyncRefreshResourceWithRawResponse(self._mcp_servers.refresh)
1102
+
1103
+
1104
+ class McpServersResourceWithStreamingResponse:
1105
+ def __init__(self, mcp_servers: McpServersResource) -> None:
1106
+ self._mcp_servers = mcp_servers
1107
+
1108
+ self.create = to_streamed_response_wrapper(
1109
+ mcp_servers.create,
1110
+ )
1111
+ self.retrieve = to_streamed_response_wrapper(
1112
+ mcp_servers.retrieve,
1113
+ )
1114
+ self.list = to_streamed_response_wrapper(
1115
+ mcp_servers.list,
1116
+ )
1117
+ self.delete = to_streamed_response_wrapper(
1118
+ mcp_servers.delete,
1119
+ )
1120
+ self.connect = to_streamed_response_wrapper(
1121
+ mcp_servers.connect,
1122
+ )
1123
+ self.modify = to_streamed_response_wrapper(
1124
+ mcp_servers.modify,
1125
+ )
1126
+
1127
+ @cached_property
1128
+ def tools(self) -> ToolsResourceWithStreamingResponse:
1129
+ return ToolsResourceWithStreamingResponse(self._mcp_servers.tools)
1130
+
1131
+ @cached_property
1132
+ def refresh(self) -> RefreshResourceWithStreamingResponse:
1133
+ return RefreshResourceWithStreamingResponse(self._mcp_servers.refresh)
1134
+
1135
+
1136
+ class AsyncMcpServersResourceWithStreamingResponse:
1137
+ def __init__(self, mcp_servers: AsyncMcpServersResource) -> None:
1138
+ self._mcp_servers = mcp_servers
1139
+
1140
+ self.create = async_to_streamed_response_wrapper(
1141
+ mcp_servers.create,
1142
+ )
1143
+ self.retrieve = async_to_streamed_response_wrapper(
1144
+ mcp_servers.retrieve,
1145
+ )
1146
+ self.list = async_to_streamed_response_wrapper(
1147
+ mcp_servers.list,
1148
+ )
1149
+ self.delete = async_to_streamed_response_wrapper(
1150
+ mcp_servers.delete,
1151
+ )
1152
+ self.connect = async_to_streamed_response_wrapper(
1153
+ mcp_servers.connect,
1154
+ )
1155
+ self.modify = async_to_streamed_response_wrapper(
1156
+ mcp_servers.modify,
1157
+ )
1158
+
1159
+ @cached_property
1160
+ def tools(self) -> AsyncToolsResourceWithStreamingResponse:
1161
+ return AsyncToolsResourceWithStreamingResponse(self._mcp_servers.tools)
1162
+
1163
+ @cached_property
1164
+ def refresh(self) -> AsyncRefreshResourceWithStreamingResponse:
1165
+ return AsyncRefreshResourceWithStreamingResponse(self._mcp_servers.refresh)