ó
    |¤jl  ã                  óx   • S r SSKJr  SSKrSSKrSSKJr  SSKJr  S
S jr	 S     SS jjr
SSS jjrSS	 jrg)aý  MCP Server mode: expose acli's tools to external MCP clients.

The design doc's Capability layer includes MCP as both a client (existing)
and a server. This module exposes acli's registered tools via the Model
Context Protocol so other MCP-compatible agents can call them.

Usage:
    acli mcp-server  # starts the MCP server on stdio

Implementation: converts ``ToolDefinition`` objects from the tool registry
into MCP tool schemas, and dispatches incoming MCP tool-call requests to
the registered handlers.
é    )ÚannotationsN)ÚAny)Úregistryc                 ó¨   • / n [         R                  " 5        H6  nU R                  UR                  UR                  UR
                  S.5        M8     U $ )z¸Convert registered tools to MCP tool schema format.

Each tool becomes:
    {
        "name": "...",
        "description": "...",
        "inputSchema": { ... JSON schema ... }
    }
)ÚnameÚdescriptionÚinputSchema)r   Ú
list_toolsÚappendr   r   Ú
parameters)ÚschemasÚtools     Ú§C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\dashscope/acli/mcp_server.pyÚtools_to_mcp_schemar      sK   € ð %'€GÜ×#Ò#Ö%ˆØ�‰àŸ	™	Ø#×/Ñ/Ø#Ÿ™ñö	
ñ &ð €Nó    c              ƒ  ó¬  #   • U R                  SS5      nU R                  S5      nU R                  S0 5      nUS:X  a  SUS[        5       0S.$ US	:X  a°  UR                  S
5      nUR                  S0 5      n[        R                   " U5      nU(       d  SUSSU 3S.S.$  U(       a  UR                  Xv5      I Sh  v•N nO-UR                  " S0 UD6n[        US5      (       a
  UI Sh  v•N nSUSS[        U5      S./0S.$ US:X  a  SUSSSS00SSS.S.S.$ SUSSU 3S.S.$  Nj N>! [         a  n	SUS[        U	5      S.S.s Sn	A	$ Sn	A	ff = f7f) z¯Handle a single MCP JSON-RPC request.

Supports:
  - ``tools/list``: return all registered tools
  - ``tools/call``: execute a tool by name

Returns a JSON-RPC response dict.
ÚmethodÚ ÚidÚparamsz
tools/listú2.0Útools)Újsonrpcr   Úresultz
tools/callr   Ú	argumentsi§€ÿÿzUnknown tool: ©ÚcodeÚmessage©r   r   ÚerrorNÚ	__await__ÚcontentÚtext)Útyper#   i¥€ÿÿÚ
initializez
2024-11-05ÚlistChangedFzacli-mcp-serverz0.1.0)r   Úversion)ÚprotocolVersionÚcapabilitiesÚ
serverInfozMethod not found: © )Úgetr   r   ÚexecuteÚfuncÚhasattrÚstrÚ	Exception)
ÚrequestÚexecutorr   Úreq_idr   Ú	tool_namer   Útool_defr   Úes
             r   Úhandle_mcp_requestr8   0   s©  é € ð �[‰[˜ 2Ó&€FØ�[‰[˜Ó€FØ�[‰[˜ 2Ó&€Fà�ÓàØØÔ 3Ó 5Ð6ñ
ð 	
ð �ÓØ—J‘J˜vÓ&ˆ	Ø—J‘J˜{¨BÓ/ˆ	Ü—<’< 	Ó*ˆÞà Øà"Ø!/°	¨{Ð;ññð ð	ÞØ'×/Ñ/°ÓD×D‘à!ŸšÑ3¨Ñ3�Ü˜6 ;×/Ñ/Ø#)Ÿ\�Fà ØØ$°ÄÀFÃÑ'LÐ&MÐNñð ð �ÓàØà#/Ø!(¨=¸%Ð*@Ð AØ'8ÀWÑMññ
ð 	
ð ØØ Ð/AÀ&ÀÐ-JÑKñð ñ9 Eñ *øô ó 	à ØØ"(´S¸³VÑ<ñõ ûð	üsZ   ‚BEÂ!D+ Â<D'Â=-D+ Ã*D)Ã+D+ Ä$EÄ'D+ Ä)D+ Ä+
EÄ5EÅEÅEÅEÅEc              ƒ  ó�  #   •  [         R                  R                  5       nU(       d  gUR                  5       nU(       d  M@   [        R
                  " U5      nSU;  a  M_  [        X 5      I Sh  v•N n[         R                  R                  [        R                  " U5      S-   5        [         R                  R                  5         MÇ  ! [        R                   ab    SSSSS.S.n[         R                  R                  [        R                  " U5      S-   5        [         R                  R                  5          GM=  f = f NÓ7f)	z†Run the MCP server on stdio (JSON-RPC over stdin/stdout).

Reads line-delimited JSON requests from stdin, writes responses to stdout.
r   NiD€ÿÿzParse errorr   r   Ú
r   )ÚsysÚstdinÚreadlineÚstripÚjsonÚloadsÚJSONDecodeErrorÚstdoutÚwriteÚdumpsÚflushr8   )r3   Úliner2   Úresponses       r   Úrun_stdio_serverrH   y   sû   é € ð
 Ü�y‰y×!Ñ!Ó#ˆÞØØ�z‰z‹|ˆÞÙð
	Ü—j’j Ó&ˆGð �wÓÙÜ+¨GÓ>×>ˆÜ�
‰
×ÑœŸš HÓ-°Ñ4Ô5Ü�
‰
×ÑÔñ1 øô ×#Ñ#ó 	à ØØ"(°]ÑCñˆHô
 �J‰J×ÑœTŸZšZ¨Ó1°DÑ8Ô9Ü�J‰J×ÑÔÛð	úñ ?ùs8   ‚AEÁC ÁEÁ0EÁ1AEÃA1EÄ<EÅ EÅEc                 óx   • SSK n SSKnSSKnSSKnSSKnSSKnSSKJn  U R                  [        U" SS9S95        g)a  Entry point for ``acli mcp-server``: run the MCP stdio server.

Registers the builtin tools (same set the CLI imports at startup) and
serves JSON-RPC over stdin/stdout. There is no interactive user at the
console in this mode, so the executor auto-approves tool calls.
r   N)ÚExecutorT)Úauto_approve)r3   )
ÚasyncioÚdashscope.acli.tools.browserÚdashscope.acli.tools.cameraÚdashscope.acli.tools.filesystemÚdashscope.acli.tools.shellÚdashscope.acli.tools.web_searchÚdashscope.acli.executorrJ   ÚrunrH   )rL   Ú	dashscoperJ   s      r   ÚmainrU   ™   s0   € ó ã'Û&Û*Û%Û*Ý0à‡K�KÔ ©(ÀÑ*EÑFÕGr   )Úreturnzlist[dict[str, Any]])N)r2   údict[str, Any]r3   r   rV   rW   )r3   r   rV   ÚNone)rV   rX   )Ú__doc__Ú
__future__r   r?   r;   Útypingr   Údashscope.acli.tools.registryr   r   r8   rH   rU   r+   r   r   Ú<module>r]      sU   ðñõ #ã Û 
Ý å 2ôð0 ðFØðFàðFð õFöRõ@Hr   