fast-agent-mcp 0.2.39__py3-none-any.whl → 0.2.41__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 fast-agent-mcp might be problematic. Click here for more details.
- {fast_agent_mcp-0.2.39.dist-info → fast_agent_mcp-0.2.41.dist-info}/METADATA +1 -1
- {fast_agent_mcp-0.2.39.dist-info → fast_agent_mcp-0.2.41.dist-info}/RECORD +41 -37
- {fast_agent_mcp-0.2.39.dist-info → fast_agent_mcp-0.2.41.dist-info}/entry_points.txt +2 -2
- mcp_agent/cli/__main__.py +29 -3
- mcp_agent/cli/commands/check_config.py +140 -81
- mcp_agent/cli/commands/go.py +151 -38
- mcp_agent/cli/commands/quickstart.py +8 -4
- mcp_agent/cli/commands/server_helpers.py +106 -0
- mcp_agent/cli/constants.py +25 -0
- mcp_agent/cli/main.py +1 -1
- mcp_agent/config.py +94 -44
- mcp_agent/core/agent_app.py +104 -15
- mcp_agent/core/agent_types.py +1 -0
- mcp_agent/core/direct_decorators.py +9 -0
- mcp_agent/core/direct_factory.py +18 -4
- mcp_agent/core/enhanced_prompt.py +165 -13
- mcp_agent/core/fastagent.py +4 -0
- mcp_agent/core/interactive_prompt.py +37 -37
- mcp_agent/core/usage_display.py +11 -1
- mcp_agent/core/validation.py +21 -2
- mcp_agent/human_input/elicitation_form.py +55 -22
- mcp_agent/llm/augmented_llm.py +28 -9
- mcp_agent/llm/augmented_llm_silent.py +48 -0
- mcp_agent/llm/model_database.py +20 -0
- mcp_agent/llm/model_factory.py +12 -0
- mcp_agent/llm/provider_key_manager.py +22 -8
- mcp_agent/llm/provider_types.py +19 -12
- mcp_agent/llm/providers/augmented_llm_anthropic.py +7 -2
- mcp_agent/llm/providers/augmented_llm_azure.py +7 -1
- mcp_agent/llm/providers/augmented_llm_google_native.py +4 -1
- mcp_agent/llm/providers/augmented_llm_openai.py +9 -2
- mcp_agent/llm/providers/augmented_llm_xai.py +38 -0
- mcp_agent/llm/usage_tracking.py +28 -3
- mcp_agent/mcp/mcp_agent_client_session.py +2 -0
- mcp_agent/mcp/mcp_aggregator.py +38 -44
- mcp_agent/mcp/sampling.py +15 -11
- mcp_agent/resources/examples/mcp/elicitations/forms_demo.py +0 -6
- mcp_agent/resources/examples/workflows/router.py +9 -0
- mcp_agent/ui/console_display.py +125 -13
- {fast_agent_mcp-0.2.39.dist-info → fast_agent_mcp-0.2.41.dist-info}/WHEEL +0 -0
- {fast_agent_mcp-0.2.39.dist-info → fast_agent_mcp-0.2.41.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
mcp_agent/__init__.py,sha256=18T0AG0W9sJhTY38O9GFFOzliDhxx9p87CvRyti9zbw,1620
|
|
2
2
|
mcp_agent/app.py,sha256=3mtHP1nRQcRaKhhxgTmCOv00alh70nT7UxNA8bN47QE,5560
|
|
3
|
-
mcp_agent/config.py,sha256=
|
|
3
|
+
mcp_agent/config.py,sha256=3XjoGlBzL7nItt6oxzsJb1pEKXWB-bHkdkc8F0hDX7o,18394
|
|
4
4
|
mcp_agent/console.py,sha256=Gjf2QLFumwG1Lav__c07X_kZxxEUSkzV-1_-YbAwcwo,813
|
|
5
5
|
mcp_agent/context.py,sha256=9s1F1-UfcI8rz9Yxm6EXHZ4cInuE_cOl_HFu8N8k3yc,7497
|
|
6
6
|
mcp_agent/context_dependent.py,sha256=QXfhw3RaQCKfscEEBRGuZ3sdMWqkgShz2jJ1ivGGX1I,1455
|
|
@@ -19,66 +19,70 @@ mcp_agent/agents/workflow/orchestrator_prompts.py,sha256=EXKEI174sshkZyPPEnWbwwN
|
|
|
19
19
|
mcp_agent/agents/workflow/parallel_agent.py,sha256=JaQFp35nmAdoBRLAwx8BfnK7kirVq9PMw24LQ3ZEzoc,7705
|
|
20
20
|
mcp_agent/agents/workflow/router_agent.py,sha256=6tvI5D_ssKNZ6-tNxYHmw6r6DAQMYgqz3PZKZz2rC44,9466
|
|
21
21
|
mcp_agent/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
mcp_agent/cli/__main__.py,sha256=
|
|
23
|
-
mcp_agent/cli/
|
|
22
|
+
mcp_agent/cli/__main__.py,sha256=KyZnfXkml0KsOnfy8T9JDYNVNynKix9cslwuafmKNbc,1089
|
|
23
|
+
mcp_agent/cli/constants.py,sha256=KawdkaN289nVB02DKPB4IVUJ8-fohIUD0gLfOp0P7B8,551
|
|
24
|
+
mcp_agent/cli/main.py,sha256=Hfa6yn47gfx_d6TUEbzDz68k2gaIS9vvN0yDbVOUgnc,3181
|
|
24
25
|
mcp_agent/cli/terminal.py,sha256=GRwD-RGW7saIz2IOWZn5vD6JjiArscELBThm1GTFkuI,1065
|
|
25
|
-
mcp_agent/cli/commands/check_config.py,sha256=
|
|
26
|
-
mcp_agent/cli/commands/go.py,sha256=
|
|
27
|
-
mcp_agent/cli/commands/quickstart.py,sha256=
|
|
26
|
+
mcp_agent/cli/commands/check_config.py,sha256=15YK0mtDQbVopnMm3HBjOeY2-00FUHj6tt8RvaemKmI,21081
|
|
27
|
+
mcp_agent/cli/commands/go.py,sha256=mVNtupzDr-qb95cv2rp9JLC2_5-QQgv8x7uyTwYH7wY,13240
|
|
28
|
+
mcp_agent/cli/commands/quickstart.py,sha256=lcozUGP9RRO8xZaayJg4pQNeY5zDQs-eg-ABm0A15cI,16471
|
|
29
|
+
mcp_agent/cli/commands/server_helpers.py,sha256=x5tD_qhf1W4D2li09sfOyfRWCOCa6lmpumYAPsEfIQs,3649
|
|
28
30
|
mcp_agent/cli/commands/setup.py,sha256=eOEd4TL-b0DaDeSJMGOfNOsTEItoZ67W88eTP4aP-bo,6482
|
|
29
31
|
mcp_agent/cli/commands/url_parser.py,sha256=5VdtcHRHzi67YignStVbz7u-rcvNNErw9oJLAUFOtEY,5855
|
|
30
32
|
mcp_agent/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
-
mcp_agent/core/agent_app.py,sha256=
|
|
32
|
-
mcp_agent/core/agent_types.py,sha256=
|
|
33
|
-
mcp_agent/core/direct_decorators.py,sha256=
|
|
34
|
-
mcp_agent/core/direct_factory.py,sha256=
|
|
35
|
-
mcp_agent/core/enhanced_prompt.py,sha256=
|
|
33
|
+
mcp_agent/core/agent_app.py,sha256=mMWfScEylf1l-rKzmRdoA7WIIBRvSypfZONDBYdo1M8,15919
|
|
34
|
+
mcp_agent/core/agent_types.py,sha256=LbSXolCIqXDt7p7AGCNO0MykgobT2IFjPy3jDEEJClk,1536
|
|
35
|
+
mcp_agent/core/direct_decorators.py,sha256=VutR9hO2dkWIWMRHXmPUeW2ZpfSZVOW2NaiVTcWEa3c,17824
|
|
36
|
+
mcp_agent/core/direct_factory.py,sha256=d_HvbAxyv2WrM07zyCpLXFVn7eArXk1LZmLKS49hzJo,19537
|
|
37
|
+
mcp_agent/core/enhanced_prompt.py,sha256=3TBSwDUBE_dRd46sZnDvuInptdF9MU2sYwCNbr2QY4E,32769
|
|
36
38
|
mcp_agent/core/error_handling.py,sha256=xoyS2kLe0eG0bj2eSJCJ2odIhGUve2SbDR7jP-A-uRw,624
|
|
37
39
|
mcp_agent/core/exceptions.py,sha256=ENAD_qGG67foxy6vDkIvc-lgopIUQy6O7zvNPpPXaQg,2289
|
|
38
|
-
mcp_agent/core/fastagent.py,sha256=
|
|
39
|
-
mcp_agent/core/interactive_prompt.py,sha256=
|
|
40
|
+
mcp_agent/core/fastagent.py,sha256=tAxapB3sjNyK6FqsJdOZt-IN5uYAi8DL1B9RHcGu55g,24849
|
|
41
|
+
mcp_agent/core/interactive_prompt.py,sha256=1XXtX8HnBt04hqfkCjPiVQP4OZegfuDa6hEQEwCUQRY,30493
|
|
40
42
|
mcp_agent/core/mcp_content.py,sha256=2D7KHY9mG_vxoDwFLKvsPQV9VRIzHItM7V-jcEnACh8,8878
|
|
41
43
|
mcp_agent/core/prompt.py,sha256=qnintOUGEoDPYLI9bu9G2OlgVMCe5ZPUZilgMzydXhc,7919
|
|
42
44
|
mcp_agent/core/request_params.py,sha256=qmFWZXeYEJyYw2IwonyrTnZWxQG7qX6bKpOPcqETa60,1603
|
|
43
|
-
mcp_agent/core/usage_display.py,sha256=
|
|
44
|
-
mcp_agent/core/validation.py,sha256=
|
|
45
|
+
mcp_agent/core/usage_display.py,sha256=VeVhlNRoTH109Yv3tokfWUKgxD4s_a2cFuvoNUbVEGU,7338
|
|
46
|
+
mcp_agent/core/validation.py,sha256=8D6d3mQanvzC2dXx5yc8-5bkoWEh9cxuT6-YSthSGFk,12676
|
|
45
47
|
mcp_agent/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
48
|
mcp_agent/executor/executor.py,sha256=E44p6d-o3OMRoP_dNs_cDnyti91LQ3P9eNU88mSi1kc,9462
|
|
47
49
|
mcp_agent/executor/task_registry.py,sha256=PCALFeYtkQrPBg4RBJnlA0aDI8nHclrNkHGUS4kV3W8,1242
|
|
48
50
|
mcp_agent/executor/workflow_signal.py,sha256=Cg1uZBk3fn8kXhPOg-wINNuVaf3v9pvLD6NbqWy5Z6E,11142
|
|
49
51
|
mcp_agent/human_input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
mcp_agent/human_input/elicitation_form.py,sha256=
|
|
52
|
+
mcp_agent/human_input/elicitation_form.py,sha256=s9rrX-qKxKZ91Uf-wjmrRIKgqDP-gdn6_1xOwizyJno,28158
|
|
51
53
|
mcp_agent/human_input/elicitation_forms.py,sha256=w8XQ1GfZX8Jw-VB4jnDI0Im4mF-T9Ts8mT2zRZBtL6M,3824
|
|
52
54
|
mcp_agent/human_input/elicitation_handler.py,sha256=YfVhIhSBc9wuszPS4zoHho4n1pwmIoq13huN4MSRkIs,3305
|
|
53
55
|
mcp_agent/human_input/elicitation_state.py,sha256=Unl9uhEybUqACCUimnETdfUprJNpYDMq3DdbbHw5oAw,1175
|
|
54
56
|
mcp_agent/human_input/handler.py,sha256=s712Z5ssTCwjL9-VKoIdP5CtgMh43YvepynYisiWTTA,3144
|
|
55
57
|
mcp_agent/human_input/types.py,sha256=RtWBOVzy8vnYoQrc36jRLn8z8N3C4pDPMBN5vF6qM5Y,1476
|
|
56
58
|
mcp_agent/llm/__init__.py,sha256=d8zgwG-bRFuwiMNMYkywg_qytk4P8lawyld_meuUmHI,68
|
|
57
|
-
mcp_agent/llm/augmented_llm.py,sha256=
|
|
59
|
+
mcp_agent/llm/augmented_llm.py,sha256=QMrNcyP-D5yfdUEhuHKtSDDg-_YnYaw8krGbafu0QTI,27567
|
|
58
60
|
mcp_agent/llm/augmented_llm_passthrough.py,sha256=F8KifmTwoQ7zyncjmoRek8SBfGdgc9yc5LRXwMQH-bg,8640
|
|
59
61
|
mcp_agent/llm/augmented_llm_playback.py,sha256=BQeBXRpO-xGAY9wIJxyde6xpHmZEdQPLd32frF8t3QQ,4916
|
|
62
|
+
mcp_agent/llm/augmented_llm_silent.py,sha256=IUnK_1Byy4D9TG0Pj46LFeNezgSTQ8d6MQIHWAImBwE,1846
|
|
60
63
|
mcp_agent/llm/augmented_llm_slow.py,sha256=DDSD8bL2flmQrVHZm-UDs7sR8aHRWkDOcOW-mX_GPok,2067
|
|
61
64
|
mcp_agent/llm/memory.py,sha256=pTOaTDV3EA3X68yKwEtUAu7s0xGIQQ_cKBhfYUnfR0w,8614
|
|
62
|
-
mcp_agent/llm/model_database.py,sha256=
|
|
63
|
-
mcp_agent/llm/model_factory.py,sha256=
|
|
65
|
+
mcp_agent/llm/model_database.py,sha256=YgqltGMDcmuoVrx-jiRj7Z5NCzKz2bshk7Rgkng2tsM,9401
|
|
66
|
+
mcp_agent/llm/model_factory.py,sha256=NY9FQJZ9oLnFNyt8RjSQha9dlCEUKDsCP76H73dBl3s,11225
|
|
64
67
|
mcp_agent/llm/prompt_utils.py,sha256=yWQHykoK13QRF7evHUKxVF0SpVLN-Bsft0Yixzvn0g0,4825
|
|
65
|
-
mcp_agent/llm/provider_key_manager.py,sha256=
|
|
66
|
-
mcp_agent/llm/provider_types.py,sha256=
|
|
68
|
+
mcp_agent/llm/provider_key_manager.py,sha256=LSWIgcXlrUS4sfBvQBCya82qC6NcXQPYLtDHwHNOXR4,3394
|
|
69
|
+
mcp_agent/llm/provider_types.py,sha256=pY67LJGhaUv0VtkgyWo8l0Lpia10JhQo0aML8-2-B3M,1054
|
|
67
70
|
mcp_agent/llm/sampling_converter.py,sha256=C7wPBlmT0eD90XWabC22zkxsrVHKCrjwIwg6cG628cI,2926
|
|
68
71
|
mcp_agent/llm/sampling_format_converter.py,sha256=xGz4odHpOcP7--eFaJaFtUR8eR9jxZS7MnLH6J7n0EU,1263
|
|
69
|
-
mcp_agent/llm/usage_tracking.py,sha256=
|
|
72
|
+
mcp_agent/llm/usage_tracking.py,sha256=rF6v8QQDam8QbvlP4jzHljKqvuNHExeYDLkUMI86czY,16073
|
|
70
73
|
mcp_agent/llm/providers/__init__.py,sha256=heVxtmuqFJOnjjxHz4bWSqTAxXoN1E8twC_gQ_yJpHk,265
|
|
71
74
|
mcp_agent/llm/providers/anthropic_utils.py,sha256=vYDN5G5jKMhD2CQg8veJYab7tvvzYkDMq8M1g_hUAQg,3275
|
|
72
75
|
mcp_agent/llm/providers/augmented_llm_aliyun.py,sha256=XylkJKZ9theSVUxJKOZkf1244hgzng4Ng4Dr209Qb-w,1101
|
|
73
|
-
mcp_agent/llm/providers/augmented_llm_anthropic.py,sha256=
|
|
74
|
-
mcp_agent/llm/providers/augmented_llm_azure.py,sha256=
|
|
76
|
+
mcp_agent/llm/providers/augmented_llm_anthropic.py,sha256=dKXP8d36jzqThV8E404PUYbTuQbRz9x7uQScW4_BU6U,24060
|
|
77
|
+
mcp_agent/llm/providers/augmented_llm_azure.py,sha256=sBVWgY88F4OsdRSHl71BAT2p3XPvuZp844z1ubwcV7U,6098
|
|
75
78
|
mcp_agent/llm/providers/augmented_llm_deepseek.py,sha256=zI9a90dwT4r6E1f_xp4K50Cj9sD7y7kNRgjo0s1pd5w,3804
|
|
76
79
|
mcp_agent/llm/providers/augmented_llm_generic.py,sha256=5Uq8ZBhcFuQTt7koP_5ykolREh2iWu8zKhNbh3pM9lQ,1210
|
|
77
|
-
mcp_agent/llm/providers/augmented_llm_google_native.py,sha256=
|
|
80
|
+
mcp_agent/llm/providers/augmented_llm_google_native.py,sha256=meWvjiNny2T8Map_TuLl8gx9JX8Ly8orHMFUCx3gtFU,22389
|
|
78
81
|
mcp_agent/llm/providers/augmented_llm_google_oai.py,sha256=cO4dvjTl9ymqEurCOo5nP09ATfXVjgkuk1yZAlWpS1s,1137
|
|
79
|
-
mcp_agent/llm/providers/augmented_llm_openai.py,sha256=
|
|
82
|
+
mcp_agent/llm/providers/augmented_llm_openai.py,sha256=R3w_XPg9hegcq-bM-W2HKivEPVJPvr5ipYKr-4mJeDQ,24264
|
|
80
83
|
mcp_agent/llm/providers/augmented_llm_openrouter.py,sha256=V_TlVKm92GHBxYIo6gpvH_6cAaIdppS25Tz6x5T7LW0,2341
|
|
81
84
|
mcp_agent/llm/providers/augmented_llm_tensorzero.py,sha256=Mol_Wzj_ZtccW-LMw0oFwWUt1m1yfofloay9QYNP23c,20729
|
|
85
|
+
mcp_agent/llm/providers/augmented_llm_xai.py,sha256=fJiO9Vkgi32pEMijxMbqoKrPCCNJmR_3YEnX0UCqOVs,1332
|
|
82
86
|
mcp_agent/llm/providers/google_converter.py,sha256=zsqxJJ636WzCL2K6w-yB94O8bdNR6mo8f5mQEnUJFyg,16831
|
|
83
87
|
mcp_agent/llm/providers/multipart_converter_anthropic.py,sha256=t5lHYGfFUacJldnrVtMNW-8gEMoto8Y7hJkDrnyZR-Y,16650
|
|
84
88
|
mcp_agent/llm/providers/multipart_converter_openai.py,sha256=kCvtTFOcOejg2BVI3_-F9OCFxAoShSj2i0hdCajHCIw,15955
|
|
@@ -102,15 +106,15 @@ mcp_agent/mcp/gen_client.py,sha256=fAVwFVCgSamw4PwoWOV4wrK9TABx1S_zZv8BctRyF2k,3
|
|
|
102
106
|
mcp_agent/mcp/hf_auth.py,sha256=YwEt7hMDJODFUIc6Zi1HLYsfVnvANGvyhpQwcPCMAgI,3379
|
|
103
107
|
mcp_agent/mcp/interfaces.py,sha256=NxUDi4eI-qWfaOS1QHWr3EjAweV-CX_CBJeBCwTwr7g,7102
|
|
104
108
|
mcp_agent/mcp/logger_textio.py,sha256=vljC1BtNTCxBAda9ExqNB-FwVNUZIuJT3h1nWmCjMws,3172
|
|
105
|
-
mcp_agent/mcp/mcp_agent_client_session.py,sha256=
|
|
106
|
-
mcp_agent/mcp/mcp_aggregator.py,sha256=
|
|
109
|
+
mcp_agent/mcp/mcp_agent_client_session.py,sha256=nEHrSalG5z47BKGwE9ooOmlSTc4Gb7qdEut071Dwepo,8987
|
|
110
|
+
mcp_agent/mcp/mcp_aggregator.py,sha256=Q2hHT_fcm6QIJ96si88AWaHxPh4NB50g3nr2lfGGZV0,48753
|
|
107
111
|
mcp_agent/mcp/mcp_connection_manager.py,sha256=dJxjnv2IRzlFIxrbPFl39-pmGcZHgyeMXVlMfqpREhE,17974
|
|
108
112
|
mcp_agent/mcp/mime_utils.py,sha256=difepNR_gpb4MpMLkBRAoyhDk-AjXUHTiqKvT_VwS1o,1805
|
|
109
113
|
mcp_agent/mcp/prompt_message_multipart.py,sha256=BDwRdNwyWHb2q2bccDb2iR2VlORqVvkvoG3xYzcMpCE,4403
|
|
110
114
|
mcp_agent/mcp/prompt_render.py,sha256=k3v4BZDThGE2gGiOYVQtA6x8WTEdOuXIEnRafANhN1U,2996
|
|
111
115
|
mcp_agent/mcp/prompt_serialization.py,sha256=MQY6QxnhQTiq0oBDsyRzFtX8sBiovUjzUFX78As8q60,17974
|
|
112
116
|
mcp_agent/mcp/resource_utils.py,sha256=K4XY8bihmBMleRTZ2viMPiD2Y2HWxFnlgIJi6dd_PYE,6588
|
|
113
|
-
mcp_agent/mcp/sampling.py,sha256=
|
|
117
|
+
mcp_agent/mcp/sampling.py,sha256=PpUtLDvu9K3U8445z6m_esHeKstdSr-JBTyn9d8ppJM,6665
|
|
114
118
|
mcp_agent/mcp/helpers/__init__.py,sha256=sKqwlUR3jSsd9PVJKjXtxHgZA1YOdzPtsSW4xVey77Q,52
|
|
115
119
|
mcp_agent/mcp/helpers/content_helpers.py,sha256=fOrRq6sIHR0Zn18k9GRRn9PWBB5WosPLhvK0yVXg2Vg,4191
|
|
116
120
|
mcp_agent/mcp/helpers/server_config_helpers.py,sha256=MkyZB2ZzfsBNsqyGd0LfUOoXxhAMS28VF-f747cJJpY,978
|
|
@@ -132,7 +136,7 @@ mcp_agent/resources/examples/mcp/elicitations/elicitation_forms_server.py,sha256
|
|
|
132
136
|
mcp_agent/resources/examples/mcp/elicitations/elicitation_game_server.py,sha256=z9kHdNc6XWjAWkvet7inVBIcYxfWoxU6n9iHrsEqU7A,6206
|
|
133
137
|
mcp_agent/resources/examples/mcp/elicitations/fastagent.config.yaml,sha256=HPe0cuFL4-rzS4hHNgZiLMPEv0jYXOp7iSsrUliAaqs,1080
|
|
134
138
|
mcp_agent/resources/examples/mcp/elicitations/fastagent.secrets.yaml.example,sha256=1vkBmh9f4mnQZm6-2B7vyU1OepImviPW5MNAJkvUIPE,394
|
|
135
|
-
mcp_agent/resources/examples/mcp/elicitations/forms_demo.py,sha256=
|
|
139
|
+
mcp_agent/resources/examples/mcp/elicitations/forms_demo.py,sha256=0msJAZ6Pha_y3hcUxn_QIkXhbMxA7sa_6kag7iqYu0U,4335
|
|
136
140
|
mcp_agent/resources/examples/mcp/elicitations/game_character.py,sha256=forNICa8SzrvrVuwzDa9HcpjauByQHbkryO2yavxqc4,2372
|
|
137
141
|
mcp_agent/resources/examples/mcp/elicitations/game_character_handler.py,sha256=tOp8rFJ0ZDrzR5siATZT_RUh7wyRpicGwcOcfTeCd2c,11211
|
|
138
142
|
mcp_agent/resources/examples/mcp/elicitations/tool_call.py,sha256=1JWeN5YnbsuASu5eQxY9yvur4KLWtUs7j0c5jSeiq9A,530
|
|
@@ -151,13 +155,13 @@ mcp_agent/resources/examples/workflows/graded_report.md,sha256=QVF38xEtDIO1a2P-x
|
|
|
151
155
|
mcp_agent/resources/examples/workflows/human_input.py,sha256=_I6nS6xYo8IHAmvzsUYOxqVGb4G6BTyJXPAmS3fNcBU,621
|
|
152
156
|
mcp_agent/resources/examples/workflows/orchestrator.py,sha256=5Jxfe0s3ai4qRpVXm3DaqtkDvjeWD2CcysW36J6JA-M,2521
|
|
153
157
|
mcp_agent/resources/examples/workflows/parallel.py,sha256=OTWhX33uum_rspAzrSf3uCTj7b67Kvw3UUU8nsosz4g,1839
|
|
154
|
-
mcp_agent/resources/examples/workflows/router.py,sha256=
|
|
158
|
+
mcp_agent/resources/examples/workflows/router.py,sha256=56FX7JhZ6ERafWGoVhspoalT1kkfkfbb5P-6MTFDamA,2032
|
|
155
159
|
mcp_agent/resources/examples/workflows/short_story.md,sha256=XN9I2kzCcMmke3dE5F2lyRH5iFUZUQ8Sy-hS3rm_Wlc,1153
|
|
156
160
|
mcp_agent/resources/examples/workflows/short_story.txt,sha256=X3y_1AyhLFN2AKzCKvucJtDgAFIJfnlbsbGZO5bBWu0,1187
|
|
157
161
|
mcp_agent/tools/tool_definition.py,sha256=L3Pxl-uLEXqlVoo-bYuFTFALeI-2pIU44YgFhsTKEtM,398
|
|
158
|
-
mcp_agent/ui/console_display.py,sha256=
|
|
159
|
-
fast_agent_mcp-0.2.
|
|
160
|
-
fast_agent_mcp-0.2.
|
|
161
|
-
fast_agent_mcp-0.2.
|
|
162
|
-
fast_agent_mcp-0.2.
|
|
163
|
-
fast_agent_mcp-0.2.
|
|
162
|
+
mcp_agent/ui/console_display.py,sha256=U9ZWzeu3dUGNCDcyFVSTqX_rpxXbn3uNmuvJ4SIlzi0,15730
|
|
163
|
+
fast_agent_mcp-0.2.41.dist-info/METADATA,sha256=SbuDturRmLzPWvatrCfSzeNkiOwrvLvZuK_u0jnn-uY,30983
|
|
164
|
+
fast_agent_mcp-0.2.41.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
165
|
+
fast_agent_mcp-0.2.41.dist-info/entry_points.txt,sha256=QaX5kLdI0VdMPRdPUF1nkG_WdLUTNjp_icW6e3EhNYU,232
|
|
166
|
+
fast_agent_mcp-0.2.41.dist-info/licenses/LICENSE,sha256=Gx1L3axA4PnuK4FxsbX87jQ1opoOkSFfHHSytW6wLUU,10935
|
|
167
|
+
fast_agent_mcp-0.2.41.dist-info/RECORD,,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
|
-
fast-agent = mcp_agent.cli.__main__:
|
|
3
|
-
fast-agent-mcp = mcp_agent.cli.__main__:
|
|
2
|
+
fast-agent = mcp_agent.cli.__main__:main
|
|
3
|
+
fast-agent-mcp = mcp_agent.cli.__main__:main
|
|
4
4
|
fastagent = mcp_agent.cli.__main__:app
|
|
5
5
|
prompt-server = mcp_agent.mcp.prompts.__main__:main
|
|
6
6
|
silsila = mcp_agent.cli.__main__:app
|
mcp_agent/cli/__main__.py
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
from mcp_agent.cli.constants import GO_SPECIFIC_OPTIONS, KNOWN_SUBCOMMANDS
|
|
1
4
|
from mcp_agent.cli.main import app
|
|
2
5
|
|
|
3
|
-
#
|
|
4
|
-
|
|
6
|
+
# if the arguments would work with "go" we'll just route to it
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def main():
|
|
10
|
+
"""Main entry point that handles auto-routing to 'go' command."""
|
|
11
|
+
# Check if we should auto-route to 'go'
|
|
12
|
+
if len(sys.argv) > 1:
|
|
13
|
+
# Check if first arg is not already a subcommand
|
|
14
|
+
first_arg = sys.argv[1]
|
|
15
|
+
|
|
16
|
+
if first_arg not in KNOWN_SUBCOMMANDS and any(
|
|
17
|
+
arg in sys.argv or any(arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS)
|
|
18
|
+
for arg in sys.argv
|
|
19
|
+
):
|
|
20
|
+
# Find where to insert 'go' - before the first go-specific option
|
|
21
|
+
insert_pos = 1
|
|
22
|
+
for i, arg in enumerate(sys.argv[1:], 1):
|
|
23
|
+
if arg in GO_SPECIFIC_OPTIONS or any(arg.startswith(opt + "=") for opt in GO_SPECIFIC_OPTIONS):
|
|
24
|
+
insert_pos = i
|
|
25
|
+
break
|
|
26
|
+
# Auto-route to go command
|
|
27
|
+
sys.argv.insert(insert_pos, "go")
|
|
5
28
|
|
|
6
|
-
if __name__ == "__main__":
|
|
7
29
|
app()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
main()
|
|
@@ -23,30 +23,14 @@ console = Console()
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def find_config_files(start_path: Path) -> dict[str, Optional[Path]]:
|
|
26
|
-
"""Find FastAgent configuration files
|
|
27
|
-
|
|
28
|
-
"config": None,
|
|
29
|
-
"secrets": None,
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
current = start_path
|
|
33
|
-
while current != current.parent: # Stop at root directory
|
|
34
|
-
config_path = current / "fastagent.config.yaml"
|
|
35
|
-
secrets_path = current / "fastagent.secrets.yaml"
|
|
36
|
-
|
|
37
|
-
if config_path.exists() and results["config"] is None:
|
|
38
|
-
results["config"] = config_path
|
|
39
|
-
|
|
40
|
-
if secrets_path.exists() and results["secrets"] is None:
|
|
41
|
-
results["secrets"] = secrets_path
|
|
26
|
+
"""Find FastAgent configuration files, preferring secrets file next to config file."""
|
|
27
|
+
from mcp_agent.config import find_fastagent_config_files
|
|
42
28
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return results
|
|
29
|
+
config_path, secrets_path = find_fastagent_config_files(start_path)
|
|
30
|
+
return {
|
|
31
|
+
"config": config_path,
|
|
32
|
+
"secrets": secrets_path,
|
|
33
|
+
}
|
|
50
34
|
|
|
51
35
|
|
|
52
36
|
def get_system_info() -> dict:
|
|
@@ -109,13 +93,23 @@ def check_api_keys(secrets_summary: dict, config_summary: dict) -> dict:
|
|
|
109
93
|
secrets_status = secrets_summary.get("status", "not_found")
|
|
110
94
|
# Get config if available
|
|
111
95
|
config = config_summary if config_summary.get("status") == "parsed" else {}
|
|
96
|
+
|
|
112
97
|
config_azure = {}
|
|
113
98
|
if config and "azure" in config.get("config", {}):
|
|
114
99
|
config_azure = config["config"]["azure"]
|
|
115
100
|
|
|
116
|
-
for
|
|
101
|
+
for provider in results:
|
|
102
|
+
# Always check environment variables first
|
|
103
|
+
env_key_name = ProviderKeyManager.get_env_key_name(provider)
|
|
104
|
+
env_key_value = os.environ.get(env_key_name)
|
|
105
|
+
if env_key_value:
|
|
106
|
+
if len(env_key_value) > 5:
|
|
107
|
+
results[provider]["env"] = f"...{env_key_value[-5:]}"
|
|
108
|
+
else:
|
|
109
|
+
results[provider]["env"] = "...***"
|
|
110
|
+
|
|
117
111
|
# Special handling for Azure: support api_key and DefaultAzureCredential
|
|
118
|
-
if
|
|
112
|
+
if provider == "azure":
|
|
119
113
|
# Prefer secrets if present, else fallback to config
|
|
120
114
|
azure_cfg = {}
|
|
121
115
|
if secrets_status == "parsed" and "azure" in secrets:
|
|
@@ -125,40 +119,18 @@ def check_api_keys(secrets_summary: dict, config_summary: dict) -> dict:
|
|
|
125
119
|
|
|
126
120
|
use_default_cred = azure_cfg.get("use_default_azure_credential", False)
|
|
127
121
|
base_url = azure_cfg.get("base_url")
|
|
128
|
-
api_key = azure_cfg.get("api_key")
|
|
129
|
-
# DefaultAzureCredential mode
|
|
130
122
|
if use_default_cred and base_url:
|
|
131
|
-
results[
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
results[provider]["config"] = "DefaultAzureCredential"
|
|
124
|
+
continue
|
|
125
|
+
|
|
126
|
+
# Check secrets file if it was parsed successfully
|
|
127
|
+
if secrets_status == "parsed":
|
|
128
|
+
config_key = ProviderKeyManager.get_config_file_key(provider, secrets)
|
|
129
|
+
if config_key and config_key != API_KEY_HINT_TEXT:
|
|
130
|
+
if len(config_key) > 5:
|
|
131
|
+
results[provider]["config"] = f"...{config_key[-5:]}"
|
|
139
132
|
else:
|
|
140
|
-
|
|
141
|
-
results[provider_value]["config"] += " + api_key"
|
|
142
|
-
else:
|
|
143
|
-
results[provider_value]["config"] = "...***"
|
|
144
|
-
else:
|
|
145
|
-
# Check environment variables using ProviderKeyManager
|
|
146
|
-
env_key_name = ProviderKeyManager.get_env_key_name(provider_value)
|
|
147
|
-
env_key_value = os.environ.get(env_key_name)
|
|
148
|
-
if env_key_value:
|
|
149
|
-
if len(env_key_value) > 5:
|
|
150
|
-
results[provider_value]["env"] = f"...{env_key_value[-5:]}"
|
|
151
|
-
else:
|
|
152
|
-
results[provider_value]["env"] = "...***"
|
|
153
|
-
|
|
154
|
-
# Check secrets file if it was parsed successfully
|
|
155
|
-
if secrets_status == "parsed":
|
|
156
|
-
config_key = ProviderKeyManager.get_config_file_key(provider_value, secrets)
|
|
157
|
-
if config_key and config_key != API_KEY_HINT_TEXT:
|
|
158
|
-
if len(config_key) > 5:
|
|
159
|
-
results[provider_value]["config"] = f"...{config_key[-5:]}"
|
|
160
|
-
else:
|
|
161
|
-
results[provider_value]["config"] = "...***"
|
|
133
|
+
results[provider]["config"] = "...***"
|
|
162
134
|
|
|
163
135
|
return results
|
|
164
136
|
|
|
@@ -173,11 +145,24 @@ def get_fastagent_version() -> str:
|
|
|
173
145
|
|
|
174
146
|
def get_config_summary(config_path: Optional[Path]) -> dict:
|
|
175
147
|
"""Extract key information from the configuration file."""
|
|
148
|
+
from mcp_agent.config import Settings
|
|
149
|
+
|
|
150
|
+
# Get actual defaults from Settings class
|
|
151
|
+
default_settings = Settings()
|
|
152
|
+
|
|
176
153
|
result = {
|
|
177
154
|
"status": "not_found", # Default status: not found
|
|
178
155
|
"error": None,
|
|
179
|
-
"default_model":
|
|
180
|
-
"logger": {
|
|
156
|
+
"default_model": default_settings.default_model,
|
|
157
|
+
"logger": {
|
|
158
|
+
"level": default_settings.logger.level,
|
|
159
|
+
"type": default_settings.logger.type,
|
|
160
|
+
"progress_display": default_settings.logger.progress_display,
|
|
161
|
+
"show_chat": default_settings.logger.show_chat,
|
|
162
|
+
"show_tools": default_settings.logger.show_tools,
|
|
163
|
+
"truncate_tools": default_settings.logger.truncate_tools,
|
|
164
|
+
"enable_markup": default_settings.logger.enable_markup,
|
|
165
|
+
},
|
|
181
166
|
"mcp_servers": [],
|
|
182
167
|
}
|
|
183
168
|
|
|
@@ -207,11 +192,19 @@ def get_config_summary(config_path: Optional[Path]) -> dict:
|
|
|
207
192
|
if "logger" in config:
|
|
208
193
|
logger_config = config["logger"]
|
|
209
194
|
result["logger"] = {
|
|
210
|
-
"level": logger_config.get("level",
|
|
211
|
-
"type": logger_config.get("type",
|
|
212
|
-
"progress_display":
|
|
213
|
-
|
|
214
|
-
|
|
195
|
+
"level": logger_config.get("level", default_settings.logger.level),
|
|
196
|
+
"type": logger_config.get("type", default_settings.logger.type),
|
|
197
|
+
"progress_display": logger_config.get(
|
|
198
|
+
"progress_display", default_settings.logger.progress_display
|
|
199
|
+
),
|
|
200
|
+
"show_chat": logger_config.get("show_chat", default_settings.logger.show_chat),
|
|
201
|
+
"show_tools": logger_config.get("show_tools", default_settings.logger.show_tools),
|
|
202
|
+
"truncate_tools": logger_config.get(
|
|
203
|
+
"truncate_tools", default_settings.logger.truncate_tools
|
|
204
|
+
),
|
|
205
|
+
"enable_markup": logger_config.get(
|
|
206
|
+
"enable_markup", default_settings.logger.enable_markup
|
|
207
|
+
),
|
|
215
208
|
}
|
|
216
209
|
|
|
217
210
|
# Get MCP server info
|
|
@@ -228,10 +221,11 @@ def get_config_summary(config_path: Optional[Path]) -> dict:
|
|
|
228
221
|
if "url" in server_config:
|
|
229
222
|
url = server_config.get("url", "")
|
|
230
223
|
server_info["url"] = url
|
|
231
|
-
|
|
224
|
+
|
|
232
225
|
# Use URL path to determine transport type
|
|
233
226
|
try:
|
|
234
227
|
from .url_parser import parse_server_url
|
|
228
|
+
|
|
235
229
|
_, transport_type, _ = parse_server_url(url)
|
|
236
230
|
server_info["transport"] = transport_type.upper()
|
|
237
231
|
except Exception:
|
|
@@ -288,7 +282,9 @@ def show_check_summary() -> None:
|
|
|
288
282
|
system_table.add_row("Python Version", ".".join(system_info["python_version"].split(".")[:3]))
|
|
289
283
|
system_table.add_row("Python Path", system_info["python_path"])
|
|
290
284
|
|
|
291
|
-
console.print(
|
|
285
|
+
console.print(
|
|
286
|
+
Panel(system_table, title="System Information", title_align="left", border_style="blue")
|
|
287
|
+
)
|
|
292
288
|
|
|
293
289
|
# Configuration files panel
|
|
294
290
|
config_path = config_files["config"]
|
|
@@ -327,25 +323,59 @@ def show_check_summary() -> None:
|
|
|
327
323
|
"Default Model", config_summary.get("default_model", "haiku (system default)")
|
|
328
324
|
)
|
|
329
325
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
326
|
+
console.print(
|
|
327
|
+
Panel(files_table, title="Configuration Files", title_align="left", border_style="blue")
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
# Logger Settings panel with two-column layout
|
|
331
|
+
logger = config_summary.get("logger", {})
|
|
332
|
+
logger_table = Table(show_header=True, box=None)
|
|
333
|
+
logger_table.add_column("Setting", style="cyan")
|
|
334
|
+
logger_table.add_column("Value")
|
|
335
|
+
logger_table.add_column("Setting", style="cyan")
|
|
336
|
+
logger_table.add_column("Value")
|
|
337
|
+
|
|
338
|
+
def bool_to_symbol(value):
|
|
339
|
+
return "[bold green]✓[/bold green]" if value else "[bold red]✗[/bold red]"
|
|
340
|
+
|
|
341
|
+
# Prepare all settings as pairs
|
|
342
|
+
settings_data = [
|
|
343
|
+
("Logger Level", logger.get("level", "warning (default)")),
|
|
344
|
+
("Logger Type", logger.get("type", "file (default)")),
|
|
345
|
+
("Progress Display", bool_to_symbol(logger.get("progress_display", True))),
|
|
346
|
+
("Show Chat", bool_to_symbol(logger.get("show_chat", True))),
|
|
347
|
+
("Show Tools", bool_to_symbol(logger.get("show_tools", True))),
|
|
348
|
+
("Truncate Tools", bool_to_symbol(logger.get("truncate_tools", True))),
|
|
349
|
+
("Enable Markup", bool_to_symbol(logger.get("enable_markup", True))),
|
|
350
|
+
]
|
|
351
|
+
|
|
352
|
+
# Add rows in two-column layout
|
|
353
|
+
for i in range(0, len(settings_data), 2):
|
|
354
|
+
left_setting, left_value = settings_data[i]
|
|
355
|
+
if i + 1 < len(settings_data):
|
|
356
|
+
right_setting, right_value = settings_data[i + 1]
|
|
357
|
+
logger_table.add_row(left_setting, left_value, right_setting, right_value)
|
|
358
|
+
else:
|
|
359
|
+
# Odd number of settings - fill right column with empty strings
|
|
360
|
+
logger_table.add_row(left_setting, left_value, "", "")
|
|
338
361
|
|
|
339
|
-
console.print(
|
|
362
|
+
console.print(
|
|
363
|
+
Panel(logger_table, title="Logger Settings", title_align="left", border_style="blue")
|
|
364
|
+
)
|
|
340
365
|
|
|
341
|
-
# API keys panel
|
|
366
|
+
# API keys panel with two-column layout
|
|
342
367
|
keys_table = Table(show_header=True, box=None)
|
|
343
368
|
keys_table.add_column("Provider", style="cyan")
|
|
344
369
|
keys_table.add_column("Env", justify="center")
|
|
345
370
|
keys_table.add_column("Config", justify="center")
|
|
346
371
|
keys_table.add_column("Active Key", style="green")
|
|
372
|
+
keys_table.add_column("Provider", style="cyan")
|
|
373
|
+
keys_table.add_column("Env", justify="center")
|
|
374
|
+
keys_table.add_column("Config", justify="center")
|
|
375
|
+
keys_table.add_column("Active Key", style="green")
|
|
347
376
|
|
|
348
|
-
|
|
377
|
+
def format_provider_row(provider, status):
|
|
378
|
+
"""Format a single provider's status for display."""
|
|
349
379
|
# Environment key indicator
|
|
350
380
|
if status["env"] and status["config"]:
|
|
351
381
|
# Both exist but config takes precedence (env is present but not active)
|
|
@@ -379,10 +409,35 @@ def show_check_summary() -> None:
|
|
|
379
409
|
# No key available for other providers
|
|
380
410
|
active = "[dim]Not configured[/dim]"
|
|
381
411
|
|
|
382
|
-
|
|
412
|
+
# Get the proper display name for the provider
|
|
413
|
+
from mcp_agent.llm.provider_types import Provider
|
|
414
|
+
|
|
415
|
+
provider_enum = Provider(provider)
|
|
416
|
+
display_name = provider_enum.display_name
|
|
417
|
+
|
|
418
|
+
return display_name, env_status, config_status, active
|
|
419
|
+
|
|
420
|
+
# Split providers into two columns
|
|
421
|
+
providers_list = list(api_keys.items())
|
|
422
|
+
mid_point = (len(providers_list) + 1) // 2 # Round up for odd numbers
|
|
423
|
+
|
|
424
|
+
for i in range(mid_point):
|
|
425
|
+
# Left column
|
|
426
|
+
left_provider, left_status = providers_list[i]
|
|
427
|
+
left_data = format_provider_row(left_provider, left_status)
|
|
428
|
+
|
|
429
|
+
# Right column (if exists)
|
|
430
|
+
if i + mid_point < len(providers_list):
|
|
431
|
+
right_provider, right_status = providers_list[i + mid_point]
|
|
432
|
+
right_data = format_provider_row(right_provider, right_status)
|
|
433
|
+
# Add row with both columns
|
|
434
|
+
keys_table.add_row(*left_data, *right_data)
|
|
435
|
+
else:
|
|
436
|
+
# Add row with only left column (right column empty)
|
|
437
|
+
keys_table.add_row(*left_data, "", "", "", "")
|
|
383
438
|
|
|
384
439
|
# Print the API Keys panel (fix: this was missing)
|
|
385
|
-
keys_panel = Panel(keys_table, title="API Keys",
|
|
440
|
+
keys_panel = Panel(keys_table, title="API Keys", title_align="left", border_style="blue")
|
|
386
441
|
console.print(keys_panel)
|
|
387
442
|
|
|
388
443
|
# MCP Servers panel (shown after API Keys)
|
|
@@ -406,12 +461,16 @@ def show_check_summary() -> None:
|
|
|
406
461
|
command_url = server["url"] or "[dim]Not configured[/dim]"
|
|
407
462
|
servers_table.add_row(name, transport, command_url)
|
|
408
463
|
|
|
409
|
-
console.print(
|
|
464
|
+
console.print(
|
|
465
|
+
Panel(servers_table, title="MCP Servers", title_align="left", border_style="blue")
|
|
466
|
+
)
|
|
410
467
|
|
|
411
468
|
# Show help tips
|
|
412
469
|
if config_status == "not_found" or secrets_status == "not_found":
|
|
413
470
|
console.print("\n[bold]Setup Tips:[/bold]")
|
|
414
|
-
console.print(
|
|
471
|
+
console.print(
|
|
472
|
+
"Run [cyan]fast-agent setup[/cyan] to create configuration files. Visit [cyan][link=https://fast-agent.ai]fast-agent.ai[/link][/cyan] for configuration guides. "
|
|
473
|
+
)
|
|
415
474
|
elif config_status == "error" or secrets_status == "error":
|
|
416
475
|
console.print("\n[bold]Config File Issues:[/bold]")
|
|
417
476
|
console.print("Fix the YAML syntax errors in your configuration files")
|