acp-sdk 0.0.6__py3-none-any.whl → 1.0.0rc1__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 (69) hide show
  1. acp_sdk/client/__init__.py +1 -0
  2. acp_sdk/client/client.py +135 -0
  3. acp_sdk/models.py +219 -0
  4. acp_sdk/server/__init__.py +2 -0
  5. acp_sdk/server/agent.py +32 -0
  6. acp_sdk/server/bundle.py +133 -0
  7. acp_sdk/server/context.py +6 -0
  8. acp_sdk/server/server.py +137 -0
  9. acp_sdk/server/telemetry.py +45 -0
  10. acp_sdk/server/utils.py +12 -0
  11. acp_sdk-1.0.0rc1.dist-info/METADATA +53 -0
  12. acp_sdk-1.0.0rc1.dist-info/RECORD +15 -0
  13. acp/__init__.py +0 -138
  14. acp/cli/__init__.py +0 -6
  15. acp/cli/claude.py +0 -139
  16. acp/cli/cli.py +0 -471
  17. acp/client/__main__.py +0 -79
  18. acp/client/session.py +0 -372
  19. acp/client/sse.py +0 -145
  20. acp/client/stdio.py +0 -153
  21. acp/server/__init__.py +0 -3
  22. acp/server/__main__.py +0 -50
  23. acp/server/highlevel/__init__.py +0 -9
  24. acp/server/highlevel/agents/__init__.py +0 -5
  25. acp/server/highlevel/agents/agent_manager.py +0 -110
  26. acp/server/highlevel/agents/base.py +0 -20
  27. acp/server/highlevel/agents/templates.py +0 -21
  28. acp/server/highlevel/context.py +0 -185
  29. acp/server/highlevel/exceptions.py +0 -25
  30. acp/server/highlevel/prompts/__init__.py +0 -4
  31. acp/server/highlevel/prompts/base.py +0 -167
  32. acp/server/highlevel/prompts/manager.py +0 -50
  33. acp/server/highlevel/prompts/prompt_manager.py +0 -33
  34. acp/server/highlevel/resources/__init__.py +0 -23
  35. acp/server/highlevel/resources/base.py +0 -48
  36. acp/server/highlevel/resources/resource_manager.py +0 -94
  37. acp/server/highlevel/resources/templates.py +0 -80
  38. acp/server/highlevel/resources/types.py +0 -185
  39. acp/server/highlevel/server.py +0 -705
  40. acp/server/highlevel/tools/__init__.py +0 -4
  41. acp/server/highlevel/tools/base.py +0 -83
  42. acp/server/highlevel/tools/tool_manager.py +0 -53
  43. acp/server/highlevel/utilities/__init__.py +0 -1
  44. acp/server/highlevel/utilities/func_metadata.py +0 -210
  45. acp/server/highlevel/utilities/logging.py +0 -43
  46. acp/server/highlevel/utilities/types.py +0 -54
  47. acp/server/lowlevel/__init__.py +0 -3
  48. acp/server/lowlevel/helper_types.py +0 -9
  49. acp/server/lowlevel/server.py +0 -643
  50. acp/server/models.py +0 -17
  51. acp/server/session.py +0 -315
  52. acp/server/sse.py +0 -175
  53. acp/server/stdio.py +0 -83
  54. acp/server/websocket.py +0 -61
  55. acp/shared/__init__.py +0 -0
  56. acp/shared/context.py +0 -14
  57. acp/shared/exceptions.py +0 -14
  58. acp/shared/memory.py +0 -87
  59. acp/shared/progress.py +0 -40
  60. acp/shared/session.py +0 -413
  61. acp/shared/version.py +0 -3
  62. acp/types.py +0 -1258
  63. acp_sdk-0.0.6.dist-info/METADATA +0 -46
  64. acp_sdk-0.0.6.dist-info/RECORD +0 -57
  65. acp_sdk-0.0.6.dist-info/entry_points.txt +0 -2
  66. acp_sdk-0.0.6.dist-info/licenses/LICENSE +0 -22
  67. {acp/client → acp_sdk}/__init__.py +0 -0
  68. {acp → acp_sdk}/py.typed +0 -0
  69. {acp_sdk-0.0.6.dist-info → acp_sdk-1.0.0rc1.dist-info}/WHEEL +0 -0
@@ -1,643 +0,0 @@
1
- """
2
- MCP Server Module
3
-
4
- This module provides a framework for creating an MCP (Model Context Protocol) server.
5
- It allows you to easily define and handle various types of requests and notifications
6
- in an asynchronous manner.
7
-
8
- Usage:
9
- 1. Create a Server instance:
10
- server = Server("your_server_name")
11
-
12
- 2. Define request handlers using decorators:
13
- @server.list_prompts()
14
- async def handle_list_prompts() -> list[types.Prompt]:
15
- # Implementation
16
-
17
- @server.get_prompt()
18
- async def handle_get_prompt(
19
- name: str, arguments: dict[str, str] | None
20
- ) -> types.GetPromptResult:
21
- # Implementation
22
-
23
- @server.list_tools()
24
- async def handle_list_tools() -> list[types.Tool]:
25
- # Implementation
26
-
27
- @server.call_tool()
28
- async def handle_call_tool(
29
- name: str, arguments: dict | None
30
- ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
31
- # Implementation
32
-
33
- @server.list_resource_templates()
34
- async def handle_list_resource_templates() -> list[types.ResourceTemplate]:
35
- # Implementation
36
-
37
- 3. Define notification handlers if needed:
38
- @server.progress_notification()
39
- async def handle_progress(
40
- progress_token: str | int, progress: float, total: float | None
41
- ) -> None:
42
- # Implementation
43
-
44
- 4. Run the server:
45
- async def main():
46
- async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
47
- await server.run(
48
- read_stream,
49
- write_stream,
50
- InitializationOptions(
51
- server_name="your_server_name",
52
- server_version="your_version",
53
- capabilities=server.get_capabilities(
54
- notification_options=NotificationOptions(),
55
- experimental_capabilities={},
56
- ),
57
- ),
58
- )
59
-
60
- asyncio.run(main())
61
-
62
- The Server class provides methods to register handlers for various MCP requests and
63
- notifications. It automatically manages the request context and handles incoming
64
- messages from the client.
65
- """
66
-
67
- import contextvars
68
- import logging
69
- import warnings
70
- from collections.abc import Awaitable, Callable
71
- from contextlib import AsyncExitStack
72
- from typing import Any, Sequence
73
-
74
- import anyio
75
- from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
76
- from pydantic import AnyUrl
77
-
78
- import acp.types as types
79
- from acp.server.lowlevel.helper_types import ReadResourceContents
80
- from acp.server.models import InitializationOptions
81
- from acp.server.session import ServerSession
82
- from acp.server.stdio import stdio_server as stdio_server
83
- from acp.shared.context import RequestContext
84
- from acp.shared.exceptions import McpError
85
- from acp.shared.session import RequestResponder
86
-
87
- logger = logging.getLogger(__name__)
88
-
89
- request_ctx: contextvars.ContextVar[RequestContext[ServerSession]] = (
90
- contextvars.ContextVar("request_ctx")
91
- )
92
-
93
-
94
- class NotificationOptions:
95
- def __init__(
96
- self,
97
- prompts_changed: bool = False,
98
- resources_changed: bool = False,
99
- tools_changed: bool = False,
100
- agents_changed: bool = False,
101
- ):
102
- self.prompts_changed = prompts_changed
103
- self.resources_changed = resources_changed
104
- self.tools_changed = tools_changed
105
- self.agents_changed = agents_changed
106
-
107
-
108
- class Server:
109
- def __init__(
110
- self, name: str, version: str | None = None, instructions: str | None = None
111
- ):
112
- self.name = name
113
- self.version = version
114
- self.instructions = instructions
115
- self.request_handlers: dict[
116
- type, Callable[..., Awaitable[types.ServerResult]]
117
- ] = {
118
- types.PingRequest: _ping_handler,
119
- }
120
- self.notification_handlers: dict[type, Callable[..., Awaitable[None]]] = {}
121
- self.notification_options = NotificationOptions()
122
- logger.debug(f"Initializing server '{name}'")
123
-
124
- def create_initialization_options(
125
- self,
126
- notification_options: NotificationOptions | None = None,
127
- experimental_capabilities: dict[str, dict[str, Any]] | None = None,
128
- ) -> InitializationOptions:
129
- """Create initialization options from this server instance."""
130
-
131
- def pkg_version(package: str) -> str:
132
- try:
133
- from importlib.metadata import version
134
-
135
- v = version(package)
136
- if v is not None:
137
- return v
138
- except Exception:
139
- pass
140
-
141
- return "unknown"
142
-
143
- return InitializationOptions(
144
- server_name=self.name,
145
- server_version=self.version if self.version else pkg_version("acp"),
146
- capabilities=self.get_capabilities(
147
- notification_options or NotificationOptions(),
148
- experimental_capabilities or {},
149
- ),
150
- instructions=self.instructions,
151
- )
152
-
153
- def get_capabilities(
154
- self,
155
- notification_options: NotificationOptions,
156
- experimental_capabilities: dict[str, dict[str, Any]],
157
- ) -> types.ServerCapabilities:
158
- """Convert existing handlers to a ServerCapabilities object."""
159
- prompts_capability = None
160
- resources_capability = None
161
- tools_capability = None
162
- agents_capability = None
163
- logging_capability = None
164
-
165
- # Set prompt capabilities if handler exists
166
- if types.ListPromptsRequest in self.request_handlers:
167
- prompts_capability = types.PromptsCapability(
168
- listChanged=notification_options.prompts_changed
169
- )
170
-
171
- # Set resource capabilities if handler exists
172
- if types.ListResourcesRequest in self.request_handlers:
173
- resources_capability = types.ResourcesCapability(
174
- subscribe=False, listChanged=notification_options.resources_changed
175
- )
176
-
177
- # Set tool capabilities if handler exists
178
- if types.ListToolsRequest in self.request_handlers:
179
- tools_capability = types.ToolsCapability(
180
- listChanged=notification_options.tools_changed
181
- )
182
-
183
- # Set agent capabilities if handler exists
184
- if types.ListAgentsRequest in self.request_handlers:
185
- agents_capability = types.AgentsCapability(
186
- templates=types.ListAgentTemplatesRequest in self.request_handlers,
187
- listChanged=notification_options.agents_changed,
188
- )
189
-
190
- # Set logging capabilities if handler exists
191
- if types.SetLevelRequest in self.request_handlers:
192
- logging_capability = types.LoggingCapability()
193
-
194
- return types.ServerCapabilities(
195
- prompts=prompts_capability,
196
- resources=resources_capability,
197
- tools=tools_capability,
198
- agents=agents_capability,
199
- logging=logging_capability,
200
- experimental=experimental_capabilities,
201
- )
202
-
203
- @property
204
- def request_context(self) -> RequestContext[ServerSession]:
205
- """If called outside of a request context, this will raise a LookupError."""
206
- return request_ctx.get()
207
-
208
- def list_prompts(self):
209
- def decorator(func: Callable[[], Awaitable[list[types.Prompt]]]):
210
- logger.debug("Registering handler for PromptListRequest")
211
-
212
- async def handler(_: Any):
213
- prompts = await func()
214
- return types.ServerResult(types.ListPromptsResult(prompts=prompts))
215
-
216
- self.request_handlers[types.ListPromptsRequest] = handler
217
- return func
218
-
219
- return decorator
220
-
221
- def get_prompt(self):
222
- def decorator(
223
- func: Callable[
224
- [str, dict[str, str] | None], Awaitable[types.GetPromptResult]
225
- ],
226
- ):
227
- logger.debug("Registering handler for GetPromptRequest")
228
-
229
- async def handler(req: types.GetPromptRequest):
230
- prompt_get = await func(req.params.name, req.params.arguments)
231
- return types.ServerResult(prompt_get)
232
-
233
- self.request_handlers[types.GetPromptRequest] = handler
234
- return func
235
-
236
- return decorator
237
-
238
- def list_resources(self):
239
- def decorator(func: Callable[[], Awaitable[list[types.Resource]]]):
240
- logger.debug("Registering handler for ListResourcesRequest")
241
-
242
- async def handler(_: Any):
243
- resources = await func()
244
- return types.ServerResult(
245
- types.ListResourcesResult(resources=resources)
246
- )
247
-
248
- self.request_handlers[types.ListResourcesRequest] = handler
249
- return func
250
-
251
- return decorator
252
-
253
- def list_resource_templates(self):
254
- def decorator(func: Callable[[], Awaitable[list[types.ResourceTemplate]]]):
255
- logger.debug("Registering handler for ListResourceTemplatesRequest")
256
-
257
- async def handler(_: Any):
258
- templates = await func()
259
- return types.ServerResult(
260
- types.ListResourceTemplatesResult(resourceTemplates=templates)
261
- )
262
-
263
- self.request_handlers[types.ListResourceTemplatesRequest] = handler
264
- return func
265
-
266
- return decorator
267
-
268
- def read_resource(self):
269
- def decorator(
270
- func: Callable[[AnyUrl], Awaitable[str | bytes | ReadResourceContents]],
271
- ):
272
- logger.debug("Registering handler for ReadResourceRequest")
273
-
274
- async def handler(req: types.ReadResourceRequest):
275
- result = await func(req.params.uri)
276
-
277
- def create_content(data: str | bytes, mime_type: str | None):
278
- match data:
279
- case str() as data:
280
- return types.TextResourceContents(
281
- uri=req.params.uri,
282
- text=data,
283
- mimeType=mime_type or "text/plain",
284
- )
285
- case bytes() as data:
286
- import base64
287
-
288
- return types.BlobResourceContents(
289
- uri=req.params.uri,
290
- blob=base64.urlsafe_b64encode(data).decode(),
291
- mimeType=mime_type or "application/octet-stream",
292
- )
293
-
294
- match result:
295
- case str() | bytes() as data:
296
- warnings.warn(
297
- "Returning str or bytes from read_resource is deprecated. "
298
- "Use ReadResourceContents instead.",
299
- DeprecationWarning,
300
- stacklevel=2,
301
- )
302
- content = create_content(data, None)
303
- case ReadResourceContents() as contents:
304
- content = create_content(contents.content, contents.mime_type)
305
- case _:
306
- raise ValueError(
307
- f"Unexpected return type from read_resource: {type(result)}"
308
- )
309
-
310
- return types.ServerResult(
311
- types.ReadResourceResult(
312
- contents=[content],
313
- )
314
- )
315
-
316
- self.request_handlers[types.ReadResourceRequest] = handler
317
- return func
318
-
319
- return decorator
320
-
321
- def set_logging_level(self):
322
- def decorator(func: Callable[[types.LoggingLevel], Awaitable[None]]):
323
- logger.debug("Registering handler for SetLevelRequest")
324
-
325
- async def handler(req: types.SetLevelRequest):
326
- await func(req.params.level)
327
- return types.ServerResult(types.EmptyResult())
328
-
329
- self.request_handlers[types.SetLevelRequest] = handler
330
- return func
331
-
332
- return decorator
333
-
334
- def subscribe_resource(self):
335
- def decorator(func: Callable[[AnyUrl], Awaitable[None]]):
336
- logger.debug("Registering handler for SubscribeRequest")
337
-
338
- async def handler(req: types.SubscribeRequest):
339
- await func(req.params.uri)
340
- return types.ServerResult(types.EmptyResult())
341
-
342
- self.request_handlers[types.SubscribeRequest] = handler
343
- return func
344
-
345
- return decorator
346
-
347
- def unsubscribe_resource(self):
348
- def decorator(func: Callable[[AnyUrl], Awaitable[None]]):
349
- logger.debug("Registering handler for UnsubscribeRequest")
350
-
351
- async def handler(req: types.UnsubscribeRequest):
352
- await func(req.params.uri)
353
- return types.ServerResult(types.EmptyResult())
354
-
355
- self.request_handlers[types.UnsubscribeRequest] = handler
356
- return func
357
-
358
- return decorator
359
-
360
- def list_tools(self):
361
- def decorator(func: Callable[[], Awaitable[list[types.Tool]]]):
362
- logger.debug("Registering handler for ListToolsRequest")
363
-
364
- async def handler(_: Any):
365
- tools = await func()
366
- return types.ServerResult(types.ListToolsResult(tools=tools))
367
-
368
- self.request_handlers[types.ListToolsRequest] = handler
369
- return func
370
-
371
- return decorator
372
-
373
- def call_tool(self):
374
- def decorator(
375
- func: Callable[
376
- ...,
377
- Awaitable[
378
- Sequence[
379
- types.TextContent | types.ImageContent | types.EmbeddedResource
380
- ]
381
- ],
382
- ],
383
- ):
384
- logger.debug("Registering handler for CallToolRequest")
385
-
386
- async def handler(req: types.CallToolRequest):
387
- try:
388
- results = await func(req.params.name, (req.params.arguments or {}))
389
- return types.ServerResult(
390
- types.CallToolResult(content=list(results), isError=False)
391
- )
392
- except Exception as e:
393
- return types.ServerResult(
394
- types.CallToolResult(
395
- content=[types.TextContent(type="text", text=str(e))],
396
- isError=True,
397
- )
398
- )
399
-
400
- self.request_handlers[types.CallToolRequest] = handler
401
- return func
402
-
403
- return decorator
404
-
405
- def list_agent_templates(self):
406
- def decorator(
407
- func: Callable[
408
- [types.ListAgentTemplatesRequest],
409
- Awaitable[types.ListAgentTemplatesResult],
410
- ],
411
- ):
412
- logger.debug("Registering handler for ListAgentTemplatesRequest")
413
-
414
- async def handler(req: types.ListAgentTemplatesRequest):
415
- return types.ServerResult(await func(req))
416
-
417
- self.request_handlers[types.ListAgentTemplatesRequest] = handler
418
- return func
419
-
420
- return decorator
421
-
422
- def list_agents(self):
423
- def decorator(
424
- func: Callable[
425
- [types.ListAgentsRequest], Awaitable[types.ListAgentsResult]
426
- ],
427
- ):
428
- logger.debug("Registering handler for ListAgentsRequest")
429
-
430
- async def handler(req: types.ListAgentsRequest):
431
- return types.ServerResult(await func(req))
432
-
433
- self.request_handlers[types.ListAgentsRequest] = handler
434
- return func
435
-
436
- return decorator
437
-
438
- def create_agent(self):
439
- def decorator(
440
- func: Callable[
441
- [types.CreateAgentRequest], Awaitable[types.CreateAgentResult]
442
- ],
443
- ):
444
- logger.debug("Registering handler for CreateAgentRequest")
445
-
446
- async def handler(req: types.CreateAgentRequest):
447
- return types.ServerResult(await func(req))
448
-
449
- self.request_handlers[types.CreateAgentRequest] = handler
450
- return func
451
-
452
- return decorator
453
-
454
- def destroy_agent(self):
455
- def decorator(
456
- func: Callable[
457
- [types.DestroyAgentRequest], Awaitable[types.DestroyAgentResult]
458
- ],
459
- ):
460
- logger.debug("Registering handler for DestroyAgentRequest")
461
-
462
- async def handler(req: types.DestroyAgentRequest):
463
- return types.ServerResult(await func(req))
464
-
465
- self.request_handlers[types.DestroyAgentRequest] = handler
466
- return func
467
-
468
- return decorator
469
-
470
- def run_agent(self):
471
- def decorator(
472
- func: Callable[
473
- ...,
474
- Awaitable[Any],
475
- ],
476
- ):
477
- logger.debug("Registering handler for RunAgentRequest")
478
-
479
- async def handler(req: types.RunAgentRequest):
480
- return types.ServerResult(await func(req))
481
-
482
- self.request_handlers[types.RunAgentRequest] = handler
483
- return func
484
-
485
- return decorator
486
-
487
- def progress_notification(self):
488
- def decorator(
489
- func: Callable[[str | int, float, float | None], Awaitable[None]],
490
- ):
491
- logger.debug("Registering handler for ProgressNotification")
492
-
493
- async def handler(req: types.ProgressNotification):
494
- await func(
495
- req.params.progressToken, req.params.progress, req.params.total
496
- )
497
-
498
- self.notification_handlers[types.ProgressNotification] = handler
499
- return func
500
-
501
- return decorator
502
-
503
- def completion(self):
504
- """Provides completions for prompts and resource templates"""
505
-
506
- def decorator(
507
- func: Callable[
508
- [
509
- types.PromptReference | types.ResourceReference,
510
- types.CompletionArgument,
511
- ],
512
- Awaitable[types.Completion | None],
513
- ],
514
- ):
515
- logger.debug("Registering handler for CompleteRequest")
516
-
517
- async def handler(req: types.CompleteRequest):
518
- completion = await func(req.params.ref, req.params.argument)
519
- return types.ServerResult(
520
- types.CompleteResult(
521
- completion=completion
522
- if completion is not None
523
- else types.Completion(values=[], total=None, hasMore=None),
524
- )
525
- )
526
-
527
- self.request_handlers[types.CompleteRequest] = handler
528
- return func
529
-
530
- return decorator
531
-
532
- async def run(
533
- self,
534
- read_stream: MemoryObjectReceiveStream[types.JSONRPCMessage | Exception],
535
- write_stream: MemoryObjectSendStream[types.JSONRPCMessage],
536
- initialization_options: InitializationOptions,
537
- # When False, exceptions are returned as messages to the client.
538
- # When True, exceptions are raised, which will cause the server to shut down
539
- # but also make tracing exceptions much easier during testing and when using
540
- # in-process servers.
541
- raise_exceptions: bool = False,
542
- ):
543
- async with AsyncExitStack() as stack:
544
- session = await stack.enter_async_context(
545
- ServerSession(read_stream, write_stream, initialization_options)
546
- )
547
-
548
- async with anyio.create_task_group() as tg:
549
- async for message in session.incoming_messages:
550
- logger.debug(f"Received message: {message}")
551
-
552
- tg.start_soon(
553
- self._handle_message, message, session, raise_exceptions
554
- )
555
-
556
- async def _handle_message(
557
- self,
558
- message: RequestResponder[types.ClientRequest, types.ServerResult]
559
- | types.ClientNotification
560
- | Exception,
561
- session: ServerSession,
562
- raise_exceptions: bool = False,
563
- ):
564
- with warnings.catch_warnings(record=True) as w:
565
- match message:
566
- case (
567
- RequestResponder(request=types.ClientRequest(root=req)) as responder
568
- ):
569
- async with responder:
570
- responder.task_group.start_soon(
571
- self._handle_request,
572
- message,
573
- req,
574
- session,
575
- raise_exceptions,
576
- )
577
- case types.ClientNotification(root=notify):
578
- await self._handle_notification(notify)
579
-
580
- for warning in w:
581
- logger.info(f"Warning: {warning.category.__name__}: {warning.message}")
582
-
583
- async def _handle_request(
584
- self,
585
- message: RequestResponder,
586
- req: Any,
587
- session: ServerSession,
588
- raise_exceptions: bool,
589
- ):
590
- logger.info(f"Processing request of type {type(req).__name__}")
591
- if type(req) in self.request_handlers:
592
- handler = self.request_handlers[type(req)]
593
- logger.debug(f"Dispatching request of type {type(req).__name__}")
594
-
595
- token = None
596
- try:
597
- # Set our global state that can be retrieved via
598
- # app.get_request_context()
599
- token = request_ctx.set(
600
- RequestContext(
601
- message.request_id,
602
- message.request_meta,
603
- session,
604
- )
605
- )
606
- response = await handler(req)
607
- except McpError as err:
608
- response = err.error
609
- except Exception as err:
610
- if raise_exceptions:
611
- raise err
612
- response = types.ErrorData(code=0, message=str(err), data=None)
613
- finally:
614
- # Reset the global state after we are done
615
- if token is not None:
616
- request_ctx.reset(token)
617
-
618
- await message.respond(response)
619
- else:
620
- await message.respond(
621
- types.ErrorData(
622
- code=types.METHOD_NOT_FOUND,
623
- message="Method not found",
624
- )
625
- )
626
-
627
- logger.debug("Response sent")
628
-
629
- async def _handle_notification(self, notify: Any):
630
- if type(notify) in self.notification_handlers:
631
- assert type(notify) in self.notification_handlers
632
-
633
- handler = self.notification_handlers[type(notify)]
634
- logger.debug(f"Dispatching notification of type {type(notify).__name__}")
635
-
636
- try:
637
- await handler(notify)
638
- except Exception as err:
639
- logger.error(f"Uncaught exception in notification handler: {err}")
640
-
641
-
642
- async def _ping_handler(request: types.PingRequest) -> types.ServerResult:
643
- return types.ServerResult(types.EmptyResult())
acp/server/models.py DELETED
@@ -1,17 +0,0 @@
1
- """
2
- This module provides simpler types to use with the server for managing prompts
3
- and tools.
4
- """
5
-
6
- from pydantic import BaseModel
7
-
8
- from acp.types import (
9
- ServerCapabilities,
10
- )
11
-
12
-
13
- class InitializationOptions(BaseModel):
14
- server_name: str
15
- server_version: str
16
- capabilities: ServerCapabilities
17
- instructions: str | None = None