This is page 1 of 20. Use http://codebase.md/fujitsu-ai/mcp-server-for-mas-developments?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .gitattributes
├── .gitignore
├── agents
│ ├── __init__.py
│ ├── AgentInterface
│ │ ├── __init__.py
│ │ ├── Python
│ │ │ ├── __init__.py
│ │ │ ├── agent.py
│ │ │ ├── color.py
│ │ │ ├── config.py
│ │ │ ├── language.py
│ │ │ ├── local_file_handler.py
│ │ │ └── network.py
│ │ └── requirements.txt
│ ├── AgentMonitoring
│ │ ├── ChatBot-Agent Dashboard Example - Grafana.json
│ │ ├── images
│ │ │ ├── Grafana.png
│ │ │ └── Prometheus.png
│ │ ├── IoT-Agent Dashboard Example - Grafana.json
│ │ ├── OpenAI compatible API - Agent Dashboard Example - Grafana.json
│ │ ├── prometheus Example.yml
│ │ └── README.md
│ ├── ChatBotAgent
│ │ ├── __init__.py
│ │ ├── config.json.example
│ │ ├── html
│ │ │ ├── favicon.ico
│ │ │ ├── index_de.html
│ │ │ ├── index.html
│ │ │ ├── Logo_light.svg
│ │ │ ├── start_http_server.ps1
│ │ │ └── start_http_server.sh
│ │ ├── Python
│ │ │ ├── __init__.py
│ │ │ └── chatbot_agent.py
│ │ ├── README.md
│ │ └── requirements.txt
│ ├── IoTAgent
│ │ ├── config_example.json
│ │ ├── Python
│ │ │ ├── iot_mqtt_agent.py
│ │ │ └── language.py
│ │ ├── README.md
│ │ └── requirements.txt
│ ├── ISMAgent
│ │ ├── config_example.json
│ │ ├── PGPT Scenario Prompts
│ │ │ ├── ISM System Prompt - Detecting Error State.txt
│ │ │ ├── ISM User Post-Prompt - Detecting Error State.txt
│ │ │ ├── ISM User Pre-Prompt - Detecting Error State.txt
│ │ │ └── README.md
│ │ ├── Python
│ │ │ ├── ism_agent.py
│ │ │ └── language.py
│ │ ├── README.md
│ │ ├── requirements.txt
│ │ └── start_ism_agent.ps1
│ ├── MCP-Client
│ │ ├── __init__.py
│ │ ├── .env.example
│ │ ├── Python
│ │ │ ├── __init__.py
│ │ │ ├── chat_handler.py
│ │ │ ├── config.py
│ │ │ ├── environment.py
│ │ │ ├── llm_client.py
│ │ │ ├── mcp_client_sse.py
│ │ │ ├── mcp_client.py
│ │ │ ├── messages
│ │ │ │ ├── __init__.py
│ │ │ │ ├── message_types
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── incrementing_id_message.py
│ │ │ │ │ ├── initialize_message.py
│ │ │ │ │ ├── json_rpc_message.py
│ │ │ │ │ ├── ping_message.py
│ │ │ │ │ ├── prompts_messages.py
│ │ │ │ │ ├── prompts_models.py
│ │ │ │ │ ├── resources_messages.py
│ │ │ │ │ └── tools_messages.py
│ │ │ │ ├── send_call_tool.py
│ │ │ │ ├── send_initialize_message.py
│ │ │ │ ├── send_message.py
│ │ │ │ ├── send_ping.py
│ │ │ │ ├── send_prompts.py
│ │ │ │ ├── send_resources.py
│ │ │ │ └── send_tools_list.py
│ │ │ ├── system_prompt_generator.py
│ │ │ ├── tools_handler.py
│ │ │ └── transport
│ │ │ ├── __init__.py
│ │ │ └── stdio
│ │ │ ├── __init__.py
│ │ │ ├── stdio_client.py
│ │ │ ├── stdio_server_parameters.py
│ │ │ └── stdio_server_shutdown.py
│ │ ├── README.md
│ │ ├── requirements.txt
│ │ └── server_config.json
│ ├── OpenAI_Compatible_API_Agent
│ │ ├── __init__.py
│ │ ├── docker-compose.yml
│ │ ├── Dockerfile
│ │ ├── pgpt_openai_api_mcp.json.example
│ │ ├── pgpt_openai_api_proxy.json.example
│ │ ├── Python
│ │ │ ├── __init__.py
│ │ │ ├── client_tests
│ │ │ │ ├── __init__.py
│ │ │ │ ├── openai_test_client_structured.py
│ │ │ │ ├── openai_test_client_tools.py
│ │ │ │ ├── openai_test_client.py
│ │ │ │ ├── vllm_client_multimodal.py
│ │ │ │ ├── vllm_client.py
│ │ │ │ ├── vllm_structured.py
│ │ │ │ └── vllm_structured2.py
│ │ │ ├── generate_api_key.py
│ │ │ ├── open_ai_helper.py
│ │ │ ├── openai_compatible_api.py
│ │ │ ├── openai_mcp_api.py
│ │ │ ├── pgpt_api.py
│ │ │ ├── privategpt_api.py
│ │ │ └── vllmproxy.py
│ │ ├── README.md
│ │ └── requirements.txt
│ └── SourceManagerAgent
│ ├── __init__.py
│ ├── config.json.example
│ └── Python
│ ├── __init__.py
│ ├── file_tools
│ │ └── loader_factory.py
│ ├── file_upload_agent.py
│ └── local_db.py
├── clients
│ ├── __init__.py
│ ├── C# .Net
│ │ ├── 1.0 mcp_login
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_login.deps.json
│ │ │ │ ├── mcp_login.dll
│ │ │ │ ├── mcp_login.exe
│ │ │ │ ├── mcp_login.pdb
│ │ │ │ ├── mcp_login.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_login.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_login.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_login.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_login.assets.cache
│ │ │ │ │ ├── mcp_login.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_login.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_login.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_login.csproj.Up2Date
│ │ │ │ │ ├── mcp_login.dll
│ │ │ │ │ ├── mcp_login.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_login.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_login.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_login.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_login.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_login.dll
│ │ │ │ ├── mcp_login.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_login.csproj.nuget.g.props
│ │ │ │ ├── mcp_login.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 1.1 mcp_logout
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_logout.deps.json
│ │ │ │ ├── mcp_logout.dll
│ │ │ │ ├── mcp_logout.exe
│ │ │ │ ├── mcp_logout.pdb
│ │ │ │ ├── mcp_logout.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_logout.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_logout.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_logout.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_logout.assets.cache
│ │ │ │ │ ├── mcp_logout.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_logout.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_logout.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_logout.csproj.Up2Date
│ │ │ │ │ ├── mcp_logout.dll
│ │ │ │ │ ├── mcp_logout.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_logout.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_logout.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_logout.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_logout.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_logout.dll
│ │ │ │ ├── mcp_logout.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_logout.csproj.nuget.g.props
│ │ │ │ ├── mcp_logout.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 2.0 mcp_chat
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_chat.deps.json
│ │ │ │ ├── mcp_chat.dll
│ │ │ │ ├── mcp_chat.exe
│ │ │ │ ├── mcp_chat.pdb
│ │ │ │ ├── mcp_chat.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_chat.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_chat.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_chat.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_chat.assets.cache
│ │ │ │ │ ├── mcp_chat.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_chat.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_chat.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_chat.csproj.Up2Date
│ │ │ │ │ ├── mcp_chat.dll
│ │ │ │ │ ├── mcp_chat.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_chat.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_chat.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_chat.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_chat.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_chat.dll
│ │ │ │ ├── mcp_chat.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_chat.csproj.nuget.g.props
│ │ │ │ ├── mcp_chat.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 2.1 mcp_continue_chat
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_continue_chat.deps.json
│ │ │ │ ├── mcp_continue_chat.dll
│ │ │ │ ├── mcp_continue_chat.exe
│ │ │ │ ├── mcp_continue_chat.pdb
│ │ │ │ ├── mcp_continue_chat.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_continue_chat.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_cont.EF178231.Up2Date
│ │ │ │ │ ├── mcp_continue_chat.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_continue_chat.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_continue_chat.assets.cache
│ │ │ │ │ ├── mcp_continue_chat.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_continue_chat.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_continue_chat.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_continue_chat.dll
│ │ │ │ │ ├── mcp_continue_chat.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_continue_chat.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_continue_chat.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_continue_chat.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_continue_chat.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_continue_chat.dll
│ │ │ │ ├── mcp_continue_chat.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_continue_chat.csproj.nuget.g.props
│ │ │ │ ├── mcp_continue_chat.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_get_chat_info.deps.json
│ │ │ │ ├── mcp_get_chat_info.dll
│ │ │ │ ├── mcp_get_chat_info.exe
│ │ │ │ ├── mcp_get_chat_info.pdb
│ │ │ │ ├── mcp_get_chat_info.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── Dokumente - Verknüpfung.lnk
│ │ │ ├── mcp_get_chat_info.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_get_.DFF47B4E.Up2Date
│ │ │ │ │ ├── mcp_get_chat_info.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_get_chat_info.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_get_chat_info.assets.cache
│ │ │ │ │ ├── mcp_get_chat_info.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_get_chat_info.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_get_chat_info.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_get_chat_info.dll
│ │ │ │ │ ├── mcp_get_chat_info.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_get_chat_info.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_get_chat_info.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_get_chat_info.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_get_chat_info.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_get_chat_info.dll
│ │ │ │ ├── mcp_get_chat_info.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_get_chat_info.csproj.nuget.g.props
│ │ │ │ ├── mcp_get_chat_info.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 3.0 mcp_create_source
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_create_source.deps.json
│ │ │ │ ├── mcp_create_source.dll
│ │ │ │ ├── mcp_create_source.exe
│ │ │ │ ├── mcp_create_source.pdb
│ │ │ │ ├── mcp_create_source.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_create_source.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_crea.CB4ED912.Up2Date
│ │ │ │ │ ├── mcp_create_source.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_create_source.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_create_source.assets.cache
│ │ │ │ │ ├── mcp_create_source.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_create_source.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_create_source.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_create_source.dll
│ │ │ │ │ ├── mcp_create_source.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_create_source.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_create_source.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_create_source.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_create_source.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_create_source.dll
│ │ │ │ ├── mcp_create_source.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_create_source.csproj.nuget.g.props
│ │ │ │ ├── mcp_create_source.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 3.1 mcp_get_source
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_get_source.deps.json
│ │ │ │ ├── mcp_get_source.dll
│ │ │ │ ├── mcp_get_source.exe
│ │ │ │ ├── mcp_get_source.pdb
│ │ │ │ ├── mcp_get_source.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_get_source.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_get_.4E61956F.Up2Date
│ │ │ │ │ ├── mcp_get_source.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_get_source.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_get_source.assets.cache
│ │ │ │ │ ├── mcp_get_source.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_get_source.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_get_source.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_get_source.dll
│ │ │ │ │ ├── mcp_get_source.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_get_source.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_get_source.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_get_source.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_get_source.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_get_source.dll
│ │ │ │ ├── mcp_get_source.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_get_source.csproj.nuget.g.props
│ │ │ │ ├── mcp_get_source.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 3.2 mcp_list_sources
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_list_sources.deps.json
│ │ │ │ ├── mcp_list_sources.dll
│ │ │ │ ├── mcp_list_sources.exe
│ │ │ │ ├── mcp_list_sources.pdb
│ │ │ │ ├── mcp_list_sources.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_list_sources.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_list_sources.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_list_sources.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_list_sources.assets.cache
│ │ │ │ │ ├── mcp_list_sources.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_list_sources.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_list_sources.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_list_sources.dll
│ │ │ │ │ ├── mcp_list_sources.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_list_sources.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_list_sources.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_list_sources.pdb
│ │ │ │ │ ├── mcp_list.A720E197.Up2Date
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_list_sources.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_list_sources.dll
│ │ │ │ ├── mcp_list_sources.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_list_sources.csproj.nuget.g.props
│ │ │ │ ├── mcp_list_sources.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 3.3 mcp_edit_source
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_edit_source.deps.json
│ │ │ │ ├── mcp_edit_source.dll
│ │ │ │ ├── mcp_edit_source.exe
│ │ │ │ ├── mcp_edit_source.pdb
│ │ │ │ ├── mcp_edit_source.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_edit_source.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_edit_source.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_edit_source.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_edit_source.assets.cache
│ │ │ │ │ ├── mcp_edit_source.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_edit_source.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_edit_source.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_edit_source.dll
│ │ │ │ │ ├── mcp_edit_source.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_edit_source.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_edit_source.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_edit_source.pdb
│ │ │ │ │ ├── mcp_edit.7303BE3B.Up2Date
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_edit_source.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_edit_source.dll
│ │ │ │ ├── mcp_edit_source.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_edit_source.csproj.nuget.g.props
│ │ │ │ ├── mcp_edit_source.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 3.4 mcp_delete_source
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_delete_source.deps.json
│ │ │ │ ├── mcp_delete_source.dll
│ │ │ │ ├── mcp_delete_source.exe
│ │ │ │ ├── mcp_delete_source.pdb
│ │ │ │ ├── mcp_delete_source.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_delete_source.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_dele.67DD13F9.Up2Date
│ │ │ │ │ ├── mcp_delete_source.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_delete_source.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_delete_source.assets.cache
│ │ │ │ │ ├── mcp_delete_source.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_delete_source.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_delete_source.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_delete_source.dll
│ │ │ │ │ ├── mcp_delete_source.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_delete_source.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_delete_source.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_delete_source.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_delete_source.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_delete_source.dll
│ │ │ │ ├── mcp_delete_source.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_delete_source.csproj.nuget.g.props
│ │ │ │ ├── mcp_delete_source.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 4.0 mcp_list_groups
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_list_groups.deps.json
│ │ │ │ ├── mcp_list_groups.dll
│ │ │ │ ├── mcp_list_groups.exe
│ │ │ │ ├── mcp_list_groups.pdb
│ │ │ │ ├── mcp_list_groups.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_list_groups.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_list_groups.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_list_groups.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_list_groups.assets.cache
│ │ │ │ │ ├── mcp_list_groups.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_list_groups.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_list_groups.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_list_groups.dll
│ │ │ │ │ ├── mcp_list_groups.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_list_groups.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_list_groups.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_list_groups.pdb
│ │ │ │ │ ├── mcp_list.EBD5E0D2.Up2Date
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_list_groups.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_list_groups.dll
│ │ │ │ ├── mcp_list_groups.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_list_groups.csproj.nuget.g.props
│ │ │ │ ├── mcp_list_groups.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 4.1 mcp_store_group
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_store_group.deps.json
│ │ │ │ ├── mcp_store_group.dll
│ │ │ │ ├── mcp_store_group.exe
│ │ │ │ ├── mcp_store_group.pdb
│ │ │ │ ├── mcp_store_group.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_store_group.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_stor.AFB4AA35.Up2Date
│ │ │ │ │ ├── mcp_store_group.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_store_group.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_store_group.assets.cache
│ │ │ │ │ ├── mcp_store_group.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_store_group.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_store_group.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_store_group.dll
│ │ │ │ │ ├── mcp_store_group.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_store_group.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_store_group.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_store_group.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_store_group.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_store_group.dll
│ │ │ │ ├── mcp_store_group.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_store_group.csproj.nuget.g.props
│ │ │ │ ├── mcp_store_group.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 4.2 mcp_delete_group
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_delete_group.deps.json
│ │ │ │ ├── mcp_delete_group.dll
│ │ │ │ ├── mcp_delete_group.exe
│ │ │ │ ├── mcp_delete_group.pdb
│ │ │ │ ├── mcp_delete_group.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_delete_group.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_dele.FE1C6298.Up2Date
│ │ │ │ │ ├── mcp_delete_group.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_delete_group.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_delete_group.assets.cache
│ │ │ │ │ ├── mcp_delete_group.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_delete_group.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_delete_group.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_delete_group.dll
│ │ │ │ │ ├── mcp_delete_group.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_delete_group.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_delete_group.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_delete_group.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_delete_group.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_delete_group.dll
│ │ │ │ ├── mcp_delete_group.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_delete_group.csproj.nuget.g.props
│ │ │ │ ├── mcp_delete_group.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 5.0 mcp_store_user
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_store_user.deps.json
│ │ │ │ ├── mcp_store_user.dll
│ │ │ │ ├── mcp_store_user.exe
│ │ │ │ ├── mcp_store_user.pdb
│ │ │ │ ├── mcp_store_user.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_store_user.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_stor.6C0F0C8A.Up2Date
│ │ │ │ │ ├── mcp_store_user.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_store_user.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_store_user.assets.cache
│ │ │ │ │ ├── mcp_store_user.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_store_user.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_store_user.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_store_user.dll
│ │ │ │ │ ├── mcp_store_user.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_store_user.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_store_user.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_store_user.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_store_user.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_store_user.dll
│ │ │ │ ├── mcp_store_user.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_store_user.csproj.nuget.g.props
│ │ │ │ ├── mcp_store_user.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 5.1 mcp_edit_user
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_edit_user.deps.json
│ │ │ │ ├── mcp_edit_user.dll
│ │ │ │ ├── mcp_edit_user.exe
│ │ │ │ ├── mcp_edit_user.pdb
│ │ │ │ ├── mcp_edit_user.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_edit_user.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_edit_user.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_edit_user.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_edit_user.assets.cache
│ │ │ │ │ ├── mcp_edit_user.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_edit_user.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_edit_user.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_edit_user.dll
│ │ │ │ │ ├── mcp_edit_user.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_edit_user.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_edit_user.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_edit_user.pdb
│ │ │ │ │ ├── mcp_edit.94A30270.Up2Date
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_edit_user.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_edit_user.dll
│ │ │ │ ├── mcp_edit_user.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_edit_user.csproj.nuget.g.props
│ │ │ │ ├── mcp_edit_user.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── 5.2 mcp_delete_user
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ └── net9.0
│ │ │ │ ├── mcp_delete_user.deps.json
│ │ │ │ ├── mcp_delete_user.dll
│ │ │ │ ├── mcp_delete_user.exe
│ │ │ │ ├── mcp_delete_user.pdb
│ │ │ │ ├── mcp_delete_user.runtimeconfig.json
│ │ │ │ └── Newtonsoft.Json.dll
│ │ │ ├── mcp_delete_user.csproj
│ │ │ ├── obj
│ │ │ │ ├── Debug
│ │ │ │ │ └── net9.0
│ │ │ │ │ ├── .NETCoreApp,Version=v9.0.AssemblyAttributes.cs
│ │ │ │ │ ├── apphost.exe
│ │ │ │ │ ├── mcp_dele.CEB7E33D.Up2Date
│ │ │ │ │ ├── mcp_delete_user.AssemblyInfo.cs
│ │ │ │ │ ├── mcp_delete_user.AssemblyInfoInputs.cache
│ │ │ │ │ ├── mcp_delete_user.assets.cache
│ │ │ │ │ ├── mcp_delete_user.csproj.AssemblyReference.cache
│ │ │ │ │ ├── mcp_delete_user.csproj.CoreCompileInputs.cache
│ │ │ │ │ ├── mcp_delete_user.csproj.FileListAbsolute.txt
│ │ │ │ │ ├── mcp_delete_user.dll
│ │ │ │ │ ├── mcp_delete_user.GeneratedMSBuildEditorConfig.editorconfig
│ │ │ │ │ ├── mcp_delete_user.genruntimeconfig.cache
│ │ │ │ │ ├── mcp_delete_user.GlobalUsings.g.cs
│ │ │ │ │ ├── mcp_delete_user.pdb
│ │ │ │ │ ├── ref
│ │ │ │ │ │ └── mcp_delete_user.dll
│ │ │ │ │ └── refint
│ │ │ │ │ └── mcp_delete_user.dll
│ │ │ │ ├── mcp_delete_user.csproj.nuget.dgspec.json
│ │ │ │ ├── mcp_delete_user.csproj.nuget.g.props
│ │ │ │ ├── mcp_delete_user.csproj.nuget.g.targets
│ │ │ │ ├── project.assets.json
│ │ │ │ └── project.nuget.cache
│ │ │ └── Program.cs
│ │ ├── Code Archiv
│ │ │ ├── mcp_chat.cs
│ │ │ ├── mcp_continue_chat.cs
│ │ │ ├── mcp_create_source.cs
│ │ │ ├── mcp_delete_group.cs
│ │ │ ├── mcp_delete_source.cs
│ │ │ ├── mcp_delete_user.cs
│ │ │ ├── mcp_edit_source.cs
│ │ │ ├── mcp_edit_user.cs
│ │ │ ├── mcp_get_chat_info.cs
│ │ │ ├── mcp_get_source.cs
│ │ │ ├── mcp_list_groups.cs
│ │ │ ├── mcp_list_sources.cs
│ │ │ ├── mcp_login.cs
│ │ │ ├── mcp_logout.cs
│ │ │ ├── mcp_store_group.cs
│ │ │ └── mcp_store_user.cs
│ │ └── README.md
│ ├── C++
│ │ ├── .vscode
│ │ │ └── launch.json
│ │ ├── 1.0 mcp_login
│ │ │ ├── MCPLoginClient.cpp
│ │ │ └── Non-TLS version
│ │ │ ├── MCPLoginClient.cpp
│ │ │ └── MCPLoginClient.exe
│ │ ├── 1.1 mcp_logout
│ │ │ ├── MCPLogoutClient.cpp
│ │ │ └── MCPLogoutClient.exe
│ │ ├── 2.0 mcp_chat
│ │ │ ├── MCPChatClient.cpp
│ │ │ └── MCPChatClient.exe
│ │ ├── 2.1 mcp_continue_chat
│ │ │ ├── MCPChatContinuationClient.cpp
│ │ │ └── MCPChatContinuationClient.exe
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ ├── MCPGetChatInfoClient.cpp
│ │ │ └── MCPGetChatInfoClient.exe
│ │ ├── 3.0 mcp_create_source
│ │ │ ├── MCPCreateSourceClient.cpp
│ │ │ └── MCPCreateSourceClient.exe
│ │ ├── 3.1 mcp_get_source
│ │ │ ├── MCPGetSourceClient.cpp
│ │ │ └── MCPGetSourceClient.exe
│ │ ├── 3.2 mcp_list_sources
│ │ │ ├── MCPListSourcesClient.cpp
│ │ │ └── MCPListSourcesClient.exe
│ │ ├── 3.3 mcp_edit_source
│ │ │ ├── MCPEditSourceClient.cpp
│ │ │ └── MCPEditSourceClient.exe
│ │ ├── 3.4 mcp_delete_source
│ │ │ ├── MCPDeleteSourceClient.cpp
│ │ │ └── MCPDeleteSourceClient.exe
│ │ ├── 4.0 mcp_list_groups
│ │ │ ├── MCPListGroupsClient.cpp
│ │ │ └── MCPListGroupsClient.exe
│ │ ├── 4.1 mcp_store_group
│ │ │ ├── MCPStoreGroupClient.cpp
│ │ │ └── MCPStoreGroupClient.exe
│ │ ├── 4.2 mcp_delete_group
│ │ │ ├── MPCDeleteGroupClient.cpp
│ │ │ └── MPCDeleteGroupClient.exe
│ │ ├── 5.0 mcp_store_user
│ │ │ ├── MCPStoreUserClient.cpp
│ │ │ └── MCPStoreUserClient.exe
│ │ ├── 5.1 mcp_edit_user
│ │ │ ├── MCPEditUserClient.cpp
│ │ │ └── MCPEditUserClient.exe
│ │ ├── 5.2 mcp_delete_user
│ │ │ ├── MCPDeleteUserClient.cpp
│ │ │ └── MCPDeleteUserClient.exe
│ │ ├── 9.0 mcp_keygen
│ │ │ ├── MCPKeygenClient.cpp
│ │ │ └── MCPKeygenClient.exe
│ │ └── README.md
│ ├── Go
│ │ ├── 1.0 mcp_login
│ │ │ ├── go.mod
│ │ │ ├── MCPLoginClient.exe
│ │ │ └── MCPLoginClient.go
│ │ ├── 1.1 mcp_logout
│ │ │ ├── MCPLogoutClient.exe
│ │ │ └── MCPLogoutClient.go
│ │ ├── 2.0 mcp_chat
│ │ │ ├── MCPChatClient.exe
│ │ │ └── MCPChatClient.go
│ │ ├── 2.1 mcp_continue_chat
│ │ │ ├── MCPChatContinuationClient.exe
│ │ │ └── MCPChatContinuationClient.go
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ ├── MCPGetChatInfoClient.exe
│ │ │ └── MCPGetChatInfoClient.go
│ │ ├── 3.0 mcp_create_source
│ │ │ ├── MCPCreateSourceClient.exe
│ │ │ └── MCPCreateSourceClient.go
│ │ ├── 3.1 mcp_get_source
│ │ │ ├── MCPGetSourceClient.exe
│ │ │ └── MCPGetSourceClient.go
│ │ ├── 3.2 mcp_list_sources
│ │ │ ├── MCPListSourcesClient.exe
│ │ │ └── MCPListSourcesClient.go
│ │ ├── 3.3 mcp_edit_source
│ │ │ ├── MCPEditSourceClient.exe
│ │ │ └── MCPEditSourceClient.go
│ │ ├── 3.4 mcp_delete_source
│ │ │ ├── MCPDeleteSourceClient.exe
│ │ │ └── MCPDeleteSourceClient.go
│ │ ├── 4.0 mcp_list_groups
│ │ │ ├── MCPListGroupsClient.exe
│ │ │ └── MCPListGroupsClient.go
│ │ ├── 4.1 mcp_store_group
│ │ │ ├── MCPStoreGroupClient.exe
│ │ │ └── MCPStoreGroupClient.go
│ │ ├── 4.2 mcp_delete_group
│ │ │ ├── MCPDeleteGroupClient.exe
│ │ │ └── MCPDeleteGroupClient.go
│ │ ├── 5.0 mcp_store_user
│ │ │ ├── MCPStoreUserClient.exe
│ │ │ └── MCPStoreUserClient.go
│ │ ├── 5.1 mcp_edit_user
│ │ │ ├── MCPEditUserClient.exe
│ │ │ └── MCPEditUserClient.go
│ │ ├── 5.2 mcp_delete_user
│ │ │ ├── MCPDeleteUserClient.exe
│ │ │ └── MCPDeleteUserClient.go
│ │ ├── 9.0 mcp_keygen
│ │ │ ├── MCPKeygenClient.exe
│ │ │ └── MCPKeygenClient.go
│ │ └── README.md
│ ├── Gradio
│ │ ├── Api.py
│ │ ├── config.json.example
│ │ ├── config.py
│ │ ├── favicon.ico
│ │ ├── file_tools
│ │ │ └── loader_factory.py
│ │ ├── language.py
│ │ ├── logos
│ │ │ ├── fsas.png
│ │ │ └── Logo_dark.svg
│ │ ├── main.py
│ │ ├── mcp_client.py
│ │ ├── mcp_servers
│ │ │ ├── arxiv
│ │ │ │ ├── arxiv-stdio.js
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ ├── requirements.txt
│ │ │ │ └── server_config.example.json
│ │ │ ├── demo-mcp-server
│ │ │ │ ├── demo-tools-sse.js
│ │ │ │ ├── demo-tools-stdio.js
│ │ │ │ └── tools
│ │ │ │ ├── assets.js
│ │ │ │ ├── calculator.js
│ │ │ │ └── weather.js
│ │ │ ├── filesystem
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── index.ts
│ │ │ │ ├── package.json
│ │ │ │ ├── README.md
│ │ │ │ ├── test
│ │ │ │ │ └── new.txt
│ │ │ │ └── tsconfig.json
│ │ │ ├── moondream
│ │ │ │ └── server.py
│ │ │ ├── pgpt
│ │ │ │ ├── __init__.py
│ │ │ │ ├── Api.py
│ │ │ │ ├── config.json.example
│ │ │ │ ├── config.py
│ │ │ │ ├── language.py
│ │ │ │ ├── pyproject.toml
│ │ │ │ ├── README.md
│ │ │ │ └── server.py
│ │ │ ├── replicate_flux
│ │ │ │ └── server.py
│ │ │ └── sqlite
│ │ │ ├── .python-version
│ │ │ ├── Dockerfile
│ │ │ ├── pyproject.toml
│ │ │ ├── README.md
│ │ │ └── src
│ │ │ └── mcp_server_sqlite
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── message_types
│ │ │ │ ├── __init__.py
│ │ │ │ ├── incrementing_id_message.py
│ │ │ │ ├── initialize_message.py
│ │ │ │ ├── json_rpc_message.py
│ │ │ │ ├── ping_message.py
│ │ │ │ ├── prompts_messages.py
│ │ │ │ ├── prompts_models.py
│ │ │ │ ├── resources_messages.py
│ │ │ │ └── tools_messages.py
│ │ │ ├── send_call_tool.py
│ │ │ ├── send_initialize_message.py
│ │ │ ├── send_message.py
│ │ │ ├── send_ping.py
│ │ │ ├── send_prompts.py
│ │ │ ├── send_resources.py
│ │ │ └── send_tools_list.py
│ │ ├── README.md
│ │ ├── requirements.txt
│ │ ├── server_config.json
│ │ ├── SourceManagement.py
│ │ ├── transport
│ │ │ ├── __init__.py
│ │ │ └── stdio
│ │ │ ├── __init__.py
│ │ │ ├── stdio_client.py
│ │ │ ├── stdio_server_parameters.py
│ │ │ └── stdio_server_shutdown.py
│ │ ├── tsconfig.json
│ │ └── UserManagement.py
│ ├── Java
│ │ ├── 1.0 mcp_login
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPLoginClient.class
│ │ │ └── MCPLoginClient.java
│ │ ├── 1.1 mcp_logout
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPLogoutClient.class
│ │ │ └── MCPLogoutClient.java
│ │ ├── 2.0 mcp_chat
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPChatClient.class
│ │ │ └── MCPChatClient.java
│ │ ├── 2.1 mcp_continue_chat
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPContinueChatClient.class
│ │ │ └── MCPContinueChatClient.java
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPGetChatInfoClient.class
│ │ │ └── MCPGetChatInfoClient.java
│ │ ├── 3.0 mcp_create_source
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPCreateSourceClient.class
│ │ │ └── MCPCreateSourceClient.java
│ │ ├── 3.1 mcp_get_source
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPGetSourceClient.class
│ │ │ └── MCPGetSourceClient.java
│ │ ├── 3.2 mcp_list_sources
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPListSourcesClient.class
│ │ │ └── MCPListSourcesClient.java
│ │ ├── 3.3 mcp_edit_source
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPEditSourceClient.class
│ │ │ └── MCPEditSourceClient.java
│ │ ├── 3.4 mcp_delete_source
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPDeleteSourceClient.class
│ │ │ └── MCPDeleteSourceClient.java
│ │ ├── 4.0 mcp_list_groups
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPListGroupsClient.class
│ │ │ └── MCPListGroupsClient.java
│ │ ├── 4.1 mcp_store_group
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPStoreGroupClient.class
│ │ │ └── MCPStoreGroupClient.java
│ │ ├── 4.2 mcp_delete_group
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPDeleteGroupClient.class
│ │ │ └── MCPDeleteGroupClient.java
│ │ ├── 5.0 mcp_store_user
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPStoreUserClient.class
│ │ │ └── MCPStoreUserClient.java
│ │ ├── 5.1 mcp_edit_user
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPEditUserClient.class
│ │ │ └── MCPEditUserClient.java
│ │ ├── 5.2 mcp_delete_user
│ │ │ ├── json-20241224.jar
│ │ │ ├── MCPDeleteUserClient.class
│ │ │ └── MCPDeleteUserClient.java
│ │ └── README.md
│ ├── JavaScript
│ │ ├── 1.0 mcp_login
│ │ │ └── MCPLoginClient.js
│ │ ├── 1.1 mcp_logout
│ │ │ └── MCPLogoutClient.js
│ │ ├── 2.0 mcp_chat
│ │ │ └── MCPChatClient.js
│ │ ├── 2.1 mcp_continue_chat
│ │ │ └── MCPContinueChatClient.js
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ └── MCPGetChatInfoClient.js
│ │ ├── 3.0 mcp_create_source
│ │ │ └── MCPCreateSourceClient.js
│ │ ├── 3.1 mcp_get_source
│ │ │ └── MCPGetSourceClient.js
│ │ ├── 3.2 mcp_list_sources
│ │ │ └── MCPListSourcesClient.js
│ │ ├── 3.3 mcp_edit_source
│ │ │ └── MCPEditSourceClient.js
│ │ ├── 3.4 mcp_delete_source
│ │ │ └── MCPDeleteSourceClient.js
│ │ ├── 4.0 mcp_list_groups
│ │ │ └── MCPListGroupsClient.js
│ │ ├── 4.1 mcp_store_group
│ │ │ └── MCPStoreGroupClient.js
│ │ ├── 4.2 mcp_delete_group
│ │ │ └── MCPDeleteGroupClient.js
│ │ ├── 5.0 mcp_store_user
│ │ │ └── MCPStoreUserClient.js
│ │ ├── 5.1 mcp_edit_user
│ │ │ └── MCPEditUserClient.js
│ │ ├── 5.2 mcp_delete_user
│ │ │ └── MCPDeleteUserClient.js
│ │ ├── 9.0 mcp_keygen
│ │ │ └── MCPKeygenClient.js
│ │ └── README.md
│ ├── PHP
│ │ ├── 1.0 mcp_login
│ │ │ └── MCPLoginClient.php
│ │ ├── 1.1 mcp_logout
│ │ │ └── MCPLogoutClient.php
│ │ ├── 2.0 mcp_chat
│ │ │ └── MCPChatClient.php
│ │ ├── 2.1 mcp_continue_chat
│ │ │ └── MCPContinueChatClient.php
│ │ ├── 2.2 mcp_get_chat_info
│ │ │ └── MCPGetChatInfoClient.php
│ │ ├── 3.0 mcp_create_source
│ │ │ └── MCPCreateSourceClient.php
│ │ ├── 3.1 mcp_get_source
│ │ │ └── MCPGetSourceClient.php
│ │ ├── 3.2 mcp_list_sources
│ │ │ └── MCPListSourcesClient.php
│ │ ├── 3.3 mcp_edit_source
│ │ │ └── MCPEditSourceClient.php
│ │ ├── 3.4 mcp_delete_source
│ │ │ └── MCPDeleteSourceClient.php
│ │ ├── 4.0 mcp_list_groups
│ │ │ └── MCPListGroupsClient.php
│ │ ├── 4.1 mcp_store_group
│ │ │ └── MCPStoreGroupClient.php
│ │ ├── 4.2 mcp_delete_group
│ │ │ └── MCPDeleteGroupClient.php
│ │ ├── 5.0 mcp_store_user
│ │ │ └── MCPStoreUserClient.php
│ │ ├── 5.1 mcp_edit_user
│ │ │ └── MCPEditUserClient.php
│ │ ├── 5.2 mcp_delete_user
│ │ │ └── MCPDeleteUserClient.php
│ │ ├── 9.0 mcp_keygen
│ │ │ └── MCPKeygenClient.php
│ │ └── README.md
│ └── Python
│ ├── __init__.py
│ ├── 1.0 mcp_login
│ │ └── MCPLoginClient.py
│ ├── 1.1 mcp_logout
│ │ └── MCPLogoutClient.py
│ ├── 2.0 mcp_chat
│ │ └── MCPChatClient.py
│ ├── 2.1 mcp_continue_chat
│ │ └── MCPContinueChatClient.py
│ ├── 2.2 mcp_get_chat_info
│ │ └── MCPGetChatInfoClient.py
│ ├── 2.3 mcp_delete_all_chats
│ │ └── MCPDeleteAllChatsClient.py
│ ├── 2.4 mcp_delete_chat
│ │ └── MCPDeleteChatClient.py
│ ├── 3.0 mcp_create_source
│ │ └── MCPCreateSourceClient.py
│ ├── 3.1 mcp_get_source
│ │ └── MCPGetSourceClient.py
│ ├── 3.2 mcp_list_sources
│ │ └── MCPListSourcesClient.py
│ ├── 3.3 mcp_edit_source
│ │ └── MCPEditSourceClient.py
│ ├── 3.4 mcp_delete_source
│ │ └── MCPDeleteSourceClient.py
│ ├── 4.0 mcp_list_groups
│ │ └── MCPListGroupsClient.py
│ ├── 4.1 mcp_store_group
│ │ └── MCPStoreGroupClient.py
│ ├── 4.2 mcp_delete_group
│ │ └── MCPDeleteGroupClient.py
│ ├── 5.0 mcp_store_user
│ │ └── MCPStoreUserClient.py
│ ├── 5.1 mcp_edit_user
│ │ └── MCPEditUserClient.py
│ ├── 5.2 mcp_delete_user
│ │ └── MCPDeleteUserClient.py
│ ├── 9.0 mcp_keygen
│ │ └── MCPKeygenClient.py
│ ├── Gradio
│ │ ├── __init__.py
│ │ └── server_config.json
│ └── README.md
├── examples
│ ├── create_users_from_csv
│ │ ├── config.json.example
│ │ ├── config.py
│ │ ├── create_users_from_csv.py
│ │ └── language.py
│ ├── dynamic_sources
│ │ └── rss_reader
│ │ ├── Api.py
│ │ ├── config.json.example
│ │ ├── config.py
│ │ ├── demo_dynamic_sources.py
│ │ └── rss_parser.py
│ ├── example_users_to_add_no_tz.csv
│ └── sftp_upload_with_id
│ ├── Api.py
│ ├── config_ftp.json.example
│ ├── config.py
│ ├── demo_upload.py
│ ├── language.py
│ └── requirements.txt
├── images
│ ├── alternative mcp client.png
│ ├── favicon
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── apple-touch-icon.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ └── site.webmanifest
│ ├── mcp-general-architecture.png
│ ├── privateGPT-MCP.png
│ └── privateGPT.png
├── InstallMPCServer.sh
├── jest.config.js
├── LICENSE
├── package.json
├── pgpt.env.json.example
├── README.md
├── security
│ ├── generate_decrypted_password.js
│ └── generate_encrypted_password.js
├── src
│ ├── helper.js
│ ├── index.js
│ ├── logger.js
│ ├── pgpt-messages.js
│ ├── public
│ │ ├── index.html
│ │ └── pgpt-mcp-logo.png
│ ├── services
│ │ └── pgpt-service.ts
│ └── types
│ └── api.ts
├── start_chatbot_agent.ps1
├── start_chatbot_agent.sh
├── start_iot_agent.ps1
├── start_iot_agent.sh
├── start_openai_compatible_api_agent.ps1
├── start_openai_compatible_api_agent.sh
├── tsconfig.json
├── ver
│ ├── index_np.js
│ └── index_proxy_np.js
└── WORKLOG.md
```
# Files
--------------------------------------------------------------------------------
/clients/Gradio/mcp_servers/sqlite/.python-version:
--------------------------------------------------------------------------------
```
1 | 3.12
2 |
```
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
```
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
```
--------------------------------------------------------------------------------
/agents/MCP-Client/.env.example:
--------------------------------------------------------------------------------
```
1 | PGPT_API_KEY = 'mykey'
2 | PGPT_OAI_BASE_URL = 'http://127.0.0.1:8001'
3 | PGPT_API_KEY_VLLM = 'vllmapikey'
4 | PGPT_OAI_BASE_URL_VLLM = 'https://vllmapi'
5 | USE_VLLM = "False"
```
--------------------------------------------------------------------------------
/clients/C# .Net/1.0 mcp_login/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/1.1 mcp_logout/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/2.0 mcp_chat/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/2.1 mcp_continue_chat/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/2.2 mcp_get_chat_info/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/3.0 mcp_create_source/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/3.1 mcp_get_source/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/3.2 mcp_list_sources/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/3.3 mcp_edit_source/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/3.4 mcp_delete_source/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/4.0 mcp_list_groups/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/4.1 mcp_store_group/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/4.2 mcp_delete_group/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/5.0 mcp_store_user/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/5.1 mcp_edit_user/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/5.2 mcp_delete_user/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
```csharp
1 | // <autogenerated />
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
5 |
```
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
```
1 | node_modules
2 | dist
3 | tests
4 | .idea
5 | logs
6 | package-lock.json
7 | pgpt.env.json
8 | agents/ChatBotAgent/pgpt_botagent.json
9 | agents/ChatBotAgent/Python/__pycache__/
10 | agents/ChatBotAgent/__pycache__
11 | open-ai-compatible-api/__pycache__/
12 | /agents/ChatBotAgent/config.json
13 | agents/__pycache__/__init__.cpython-312.pyc
14 | *.pyc
15 | /.vscode
16 | agents/ChatBotAgent/flask.log
17 | agents/OpenAI_Compatible_API_Agent/pgpt_openai_api_mcp.json
18 | agents/OpenAI_Compatible_API_Agent/pgpt_openai_api_proxy.json
19 | agents/OpenAI_Compatible_API_Agent/pgpt_openai_api_proxy_sam.json
20 | agents/ChatBotAgent/agent.log
21 | agents/OpenAI_Compatible_API_Agent/venv
22 | agent.log
23 | *.log
24 | agents/SourceManagerAgent/config.json
25 | agents/SourceManagerAgent/database/documents.sql
26 | /tests/mcp-cli/undefined/
27 | /agents/MCP-Client/undefined/
28 | agents/MCP-Client/.env
29 | agents/MCP-Client/test_prompts.txt
30 | /agents/MCP-Client/server_config2.json
31 | clients/Python/Gradio/.gradio/cached_examples/16/log.csv
32 | agents/OpenAI_Compatible_API_Agent/.gradio/cached_examples/16/log.csv
33 | clients/Python/Gradio/config.json
34 | clients/Gradio/config.json
35 | clients/Gradio/mcp_servers/sqlite/uv.lock
36 | clients/Gradio/mcp_servers/sqlite/test.db
37 | clients/Gradio/models/moondream-2b-int8.mf
38 | clients/Gradio/models/moondream-0_5b-int8.mf
39 | examples/dynamic_sources/rss_reader/config.json
40 | /clients/Gradio/mcp_servers/pgpt/config.json
41 | examples/sftp_upload_with_id/config_ftp.json
42 |
```
--------------------------------------------------------------------------------
/clients/Gradio/mcp_servers/pgpt/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # mcp-server-pgpt
2 | Model Context Protocol server to access PrivateGPT functionalities
3 |
4 | [](https://www.python.org/downloads/release/python-3120/)
5 | [](https://opensource.org/licenses/MIT)
6 |
7 | ## Demos
8 |
9 |
10 | https://github.com/user-attachments/assets/dc4e377b-4efb-43e6-85fa-93ed852fe21f
11 |
12 | uv sync
13 |
14 | ## Quickstart
15 |
16 | To try this in Claude Desktop app, add this to your claude config files:
17 |
18 | ```json
19 | {
20 | "mcpServers": {
21 | "mcp-server-oracle": {
22 | "command": "uvx",
23 | "args": [
24 | "mcp-server-oracle"
25 | ],
26 | "env": {
27 | "ORACLE_CONNECTION_STRING": "username/password@hostname:password/service_name"
28 | }
29 | }
30 | }
31 | }
32 | ```
33 |
34 | ### Prerequisites
35 |
36 | - UV (pacakge manager)
37 | - Python 3.12+
38 | - Claude Desktop
39 |
40 | ### Installation
41 |
42 | #### Claude Desktop Configuration
43 |
44 | Add the server configuration to your Claude Desktop config file:
45 |
46 | **MacOS**: `~/Library/Application\ Support/Claude/claude_desktop_config.json`
47 | **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
48 |
49 |
50 | ## Contributing
51 |
52 | 1. Fork the repository from [mcp-server-oracle](https://github.com/hdcola/mcp-server-oracle)
53 | 2. Create your feature branch
54 | 3. Commit your changes
55 | 4. Push to the branch
56 | 5. Open a Pull Request
57 |
58 | ## License
59 |
60 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
61 |
```
--------------------------------------------------------------------------------
/agents/MCP-Client/README.md:
--------------------------------------------------------------------------------
```markdown
1 |
2 | # MCP-Client
3 |
4 | ## Overview
5 | The **MCP Client** is an example Client that uses the PGPT OpenAI-Compatible API (or other providers) and MCP Servers to make use of MCP tools.
6 |
7 |
8 | ---
9 |
10 | ## Features
11 | - **Load Multiple MCP servers**
12 | - **Communicate via Stdio**
13 | - **List tools, and use tools**
14 |
15 | ## Prerequisites
16 | - **Python:** 3.8 or higher
17 | - **Dependencies:**
18 | - **Have the OpenAI Compatible API agent running**
19 | ---
20 |
21 | ## Setup
22 | 1. **Clone the Repository:**
23 | ```bash
24 | git clone https://github.com/pgpt-dev/MCP-Server-for-MAS-Developments.git
25 | cd MCP-Server-for-MAS-Developments
26 | ```
27 |
28 | 2. **(Optional) Create and Activate a Virtual Environment:**
29 | - **Windows:**
30 | ```bash
31 | python -m venv venv
32 | .\venv\Scripts\activate
33 | ```
34 |
35 | - **Unix/MacOS:**
36 | ```bash
37 | python -m venv venv
38 | source venv/bin/activate
39 | ```
40 |
41 | 3. **Install Dependencies:**
42 | ```bash
43 | pip install -r agents/MCP-Client/requirements.txt
44 | ```
45 |
46 | 4. **Configure the Agent:**
47 | Copy the example configuration file and adjust it to your environment:
48 |
49 | ```bash
50 | cp agents/MCP-Client/.env.example agents/MCP-Client/.env
51 | ```
52 |
53 | **Example `config.json`:**
54 |
55 | ```env
56 | PGPT_API_KEY = '<your api key>'
57 | PGPT_OAI_BASE_URL = '<PGPT OpenAiCompatible API URL>'
58 | ```
59 |
60 |
61 | ## Running the Agent
62 | To start the MCP-Client, ensure you're in the repository's root directory and the OAI Agent is running and run:
63 |
64 | ```bash
65 | python -m agents.MCP-Client.Python.mcp_client
66 | ```
67 |
68 | ---
69 |
70 |
71 | ## License
72 | This project is licensed under the MIT License - see the LICENSE file for details.
73 |
```
--------------------------------------------------------------------------------
/clients/Gradio/mcp_servers/arxiv/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # arXiv MCP Server Integration
2 |
3 | This integration allows you to use the arXiv MCP Server with the Gradio client. The arXiv MCP Server provides tools for searching, downloading, and reading arXiv papers.
4 |
5 | ## Prerequisites
6 |
7 | - Python 3.10 or higher
8 | - Node.js 16 or higher
9 |
10 | ## Installation
11 |
12 | 1. Install the arxiv-mcp-server package:
13 | ```bash
14 | pip install arxiv-mcp-server
15 | ```
16 |
17 | 2. Make sure the arxiv-stdio.js script is executable:
18 | ```bash
19 | chmod +x arxiv-stdio.js
20 | ```
21 |
22 | ## Configuration
23 |
24 | Add the arxiv server to your server_config.json file:
25 |
26 | ```json
27 | {
28 | "mcpServers": {
29 | "arxiv": {
30 | "command": "node",
31 | "args": [
32 | "clients/Gradio/mcp_servers/arxiv/arxiv-stdio.js"
33 | ]
34 | }
35 | }
36 | }
37 | ```
38 |
39 | ## Available Tools
40 |
41 | The arXiv MCP Server provides the following tools:
42 |
43 | 1. **search_papers**: Search for papers on arXiv
44 | - Parameters:
45 | - query: The search query
46 | - max_results: Maximum number of results to return (default: 10)
47 |
48 | 2. **download_paper**: Download a paper from arXiv
49 | - Parameters:
50 | - paper_id: The arXiv ID of the paper
51 |
52 | 3. **list_papers**: List downloaded papers
53 | - Parameters: None
54 |
55 | 4. **read_paper**: Read a downloaded paper
56 | - Parameters:
57 | - paper_id: The arXiv ID of the paper
58 |
59 | ## Example Usage
60 |
61 | Here are some example prompts to use with the arXiv MCP Server:
62 |
63 | - "Search for papers about large language models"
64 | - "Download the paper with ID 2303.08774"
65 | - "List all downloaded papers"
66 | - "Read the paper with ID 2303.08774"
67 |
68 | ## Troubleshooting
69 |
70 | If you encounter any issues, make sure:
71 |
72 | 1. The arxiv-mcp-server package is installed
73 | 2. The arxiv-stdio.js script is executable
74 | 3. The server_config.json file is correctly configured
75 | 4. You have an active internet connection to access arXiv
76 |
```
--------------------------------------------------------------------------------
/clients/Gradio/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # PrivateGPT Multi-Backend Demo Chat App
2 |
3 | ## Description
4 | This is a small demo demonstrating the usage of both, the VLLM API and the PrivateGPT API via RAG.
5 | Note: This is still under development and might change in the future
6 | ---
7 |
8 | ## Prerequisites
9 | - Python 3.8 or higher
10 | - Access to the PrivateGPT server
11 | - Access to the VLLM API on PrivateGPT
12 |
13 | ---
14 |
15 | ## Setup
16 | 1. **Clone the repository:**
17 | ```bash
18 | git clone [https://github.com/Fujitsu-AI/MCP-Server-for-MAS-Developments.git](https://github.com/Fujitsu-AI/MCP-Server-for-MAS-Developments.git)
19 | cd MCP-Server-for-MAS-Developments/
20 | ```
21 |
22 | 2. **Optional: Create and activate a virtual environment:**
23 | ```bash
24 | python -m venv venv
25 | ```
26 |
27 | - **Windows:**
28 | ```bash
29 | .\venv\Scripts\activate
30 | ```
31 |
32 | - **Unix/MacOS:**
33 | ```bash
34 | source venv/bin/activate
35 | ```
36 |
37 | 3. **Install dependencies:**
38 | ```bash
39 | pip install -r .\clients\Gradio\requirements.txt
40 | ```
41 |
42 | 4. **Customise configuration file:**
43 |
44 | - 4.1 **Configuration for Gradio Client:**
45 |
46 | Copy the `config.json.example` file to `config.json` e.g. with `cp .\clients\Gradio\config.json.example .\clients\Gradio\config.json`
47 | Make sure that the `config.json` is configured correctly and contains all necessary fields. The file should look like this:
48 | ```json
49 | {
50 | "base_url": "https://.../api/v1",
51 | "proxy_user": "",
52 | "proxy_password": "",
53 | "access_header": "",
54 | "vllm_url": "https://.../api/v1",
55 | "vllm_api_key": "",
56 | "language": "en",
57 | "use_public": true
58 | }
59 |
60 | ```
61 |
62 |
63 |
64 | 5. **Start the UI:**
65 | - 5.1 **Start the multi-backend Gradio Client Demo:**
66 | ```bash
67 | python -m clients.Gradio.main
68 | ```
69 |
70 |
71 | ## License
72 | This project is licensed under the MIT License - see the LICENSE file for details.
```
--------------------------------------------------------------------------------
/clients/Gradio/mcp_servers/sqlite/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # SQLite MCP Server
2 |
3 | ## Overview
4 | A Model Context Protocol (MCP) server implementation that provides database interaction and business intelligence capabilities through SQLite. This server enables running SQL queries, analyzing business data, and automatically generating business insight memos.
5 |
6 | ## Components
7 |
8 | ### Resources
9 | The server exposes a single dynamic resource:
10 | - `memo://insights`: A continuously updated business insights memo that aggregates discovered insights during analysis
11 | - Auto-updates as new insights are discovered via the append-insight tool
12 |
13 | ### Prompts
14 | The server provides a demonstration prompt:
15 | - `mcp-demo`: Interactive prompt that guides users through database operations
16 | - Required argument: `topic` - The business domain to analyze
17 | - Generates appropriate database schemas and sample data
18 | - Guides users through analysis and insight generation
19 | - Integrates with the business insights memo
20 |
21 | ### Tools
22 | The server offers six core tools:
23 |
24 | #### Query Tools
25 | - `read_query`
26 | - Execute SELECT queries to read data from the database
27 | - Input:
28 | - `query` (string): The SELECT SQL query to execute
29 | - Returns: Query results as array of objects
30 |
31 | - `write_query`
32 | - Execute INSERT, UPDATE, or DELETE queries
33 | - Input:
34 | - `query` (string): The SQL modification query
35 | - Returns: `{ affected_rows: number }`
36 |
37 | - `create_table`
38 | - Create new tables in the database
39 | - Input:
40 | - `query` (string): CREATE TABLE SQL statement
41 | - Returns: Confirmation of table creation
42 |
43 | #### Schema Tools
44 | - `list_tables`
45 | - Get a list of all tables in the database
46 | - No input required
47 | - Returns: Array of table names
48 |
49 | - `describe-table`
50 | - View schema information for a specific table
51 | - Input:
52 | - `table_name` (string): Name of table to describe
53 | - Returns: Array of column definitions with names and types
54 |
55 | #### Analysis Tools
56 | - `append_insight`
57 | - Add new business insights to the memo resource
58 | - Input:
59 | - `insight` (string): Business insight discovered from data analysis
60 | - Returns: Confirmation of insight addition
61 | - Triggers update of memo://insights resource
62 |
63 |
64 | ## Usage with Claude Desktop
65 |
66 | ### uv
67 |
68 | ```bash
69 | # Add the server to your claude_desktop_config.json
70 | "mcpServers": {
71 | "sqlite": {
72 | "command": "uv",
73 | "args": [
74 | "--directory",
75 | "parent_of_servers_repo/servers/src/sqlite",
76 | "run",
77 | "mcp-server-sqlite",
78 | "--db-path",
79 | "~/test.db"
80 | ]
81 | }
82 | }
83 | ```
84 |
85 | ### Docker
86 |
87 | ```json
88 | # Add the server to your claude_desktop_config.json
89 | "mcpServers": {
90 | "sqlite": {
91 | "command": "docker",
92 | "args": [
93 | "run",
94 | "--rm",
95 | "-i",
96 | "-v",
97 | "mcp-test:/mcp",
98 | "mcp/sqlite",
99 | "--db-path",
100 | "/mcp/test.db"
101 | ]
102 | }
103 | }
104 | ```
105 |
106 | ## Building
107 |
108 | Docker:
109 |
110 | ```bash
111 | docker build -t mcp/sqlite .
112 | ```
113 |
114 | ## License
115 |
116 | This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
117 |
```
--------------------------------------------------------------------------------
/agents/IoTAgent/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # Fujitsu PrivateGPT MQTT IoT Agent
2 | The **IoT MQTT Agent** is a Python application that connects to an MQTT broker, processes vehicle data, and logs messages as JSON records. In addition, it communicates with a Chatbot Agent to generate human-readable, logical sentences from raw data. This communication is performed using the standardized FIPA ACL (Agent Communication Language) protocol, ensuring interoperability in multi-agent environments.
3 |
4 | ---
5 |
6 | ## Features
7 | - **MQTT Communication:**
8 | Connects to an MQTT broker to subscribe to topics and receive vehicle data.
9 |
10 | - **Data Logging:**
11 | Records incoming messages as JSON records with timestamps, vehicle details, and parameter values. Data is saved locally and rotated based on file size limits.
12 |
13 | - **Multi-Language Support:**
14 | Processes messages in multiple languages (e.g., German and English) and stores generated sentences accordingly.
15 |
16 | - **Chatbot Agent Integration:**
17 | Utilizes a Chatbot Agent to generate logical sentences from incoming MQTT data. The request to the Chatbot Agent is structured as a FIPA ACL message.
18 |
19 | - **FIPA ACL Standard:**
20 | The agent leverages FIPA ACL for structured multi-agent communication. Each message includes standardized fields such as:
21 | - **Performative:** (`request` or `failure`)
22 | - **Sender:** (`IoT_MQTT_Agent`)
23 | - **Receiver:** (`Chatbot_Agent`)
24 | - **Language:** (`fipa-sl`)
25 | - **Ontology:** (`fujitsu-iot-ontology`)
26 | - **Content:** (The JSON parameters used to generate a logical sentence)
27 |
28 | - **SFTP File Transfer:**
29 | When log files exceed a size threshold, they are automatically uploaded to a remote SFTP server, connected to Private GPT bulk upload services, and archived locally.
30 |
31 | ---
32 |
33 | ## How It Works
34 | 1. **Configuration Loading:**
35 | The agent loads its settings from a JSON configuration file (default: `pgpt_iot_agent.json`), which includes details for MQTT, SFTP, file handling, and the Chatbot Agent.
36 |
37 | 2. **MQTT Subscription:**
38 | Once connected to the MQTT broker, the agent subscribes to a pre-defined topic to receive data from vehicles.
39 |
40 | 3. **Message Processing & Logging:**
41 | Incoming MQTT messages are parsed, timestamped, and saved locally as JSON records. Additionally, the agent displays and logs these records.
42 |
43 | 4. **Interpreting Data via the Chatbot Agent:**
44 | - The agent prepares a prompt based on the received data.
45 | - It then sends a **FIPA ACL** request to the Chatbot Agent with the necessary details.
46 | - If the Chatbot Agent returns a failure (e.g., due to a connectivity issue), the IoT Agent waits and retries the request until a successful response is received.
47 | - Upon receiving an OK response, the agent logs the generated sentence and saves it to a language-specific text file.
48 |
49 | 5. **File Management:**
50 | Files are automatically rotated when they reach a configured size limit, ensuring continuous logging without manual intervention.
51 |
52 | ---
53 |
54 | ## Requirements
55 | - **Python 3.x**
56 |
57 | - **Python Libraries:**
58 | The required libraries are listed in `requirements.txt` and include:
59 | - `paho-mqtt`
60 | - `paramiko`
61 | - `requests`
62 | - Plus standard libraries such as `json`, `logging`, `datetime`, etc.
63 |
64 | ---
65 |
66 | ## License
67 | This project is licensed under the MIT License - see the LICENSE file for details.
```
--------------------------------------------------------------------------------
/clients/Gradio/mcp_servers/filesystem/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # Filesystem MCP Server
2 |
3 | Node.js server implementing Model Context Protocol (MCP) for filesystem operations.
4 |
5 | ## Features
6 |
7 | - Read/write files
8 | - Create/list/delete directories
9 | - Move files/directories
10 | - Search files
11 | - Get file metadata
12 |
13 | **Note**: The server will only allow operations within directories specified via `args`.
14 |
15 | ## API
16 |
17 | ### Resources
18 |
19 | - `file://system`: File system operations interface
20 |
21 | ### Tools
22 |
23 | - **read_file**
24 | - Read complete contents of a file
25 | - Input: `path` (string)
26 | - Reads complete file contents with UTF-8 encoding
27 |
28 | - **read_multiple_files**
29 | - Read multiple files simultaneously
30 | - Input: `paths` (string[])
31 | - Failed reads won't stop the entire operation
32 |
33 | - **write_file**
34 | - Create new file or overwrite existing (exercise caution with this)
35 | - Inputs:
36 | - `path` (string): File location
37 | - `content` (string): File content
38 |
39 | - **edit_file**
40 | - Make selective edits using advanced pattern matching and formatting
41 | - Features:
42 | - Line-based and multi-line content matching
43 | - Whitespace normalization with indentation preservation
44 | - Fuzzy matching with confidence scoring
45 | - Multiple simultaneous edits with correct positioning
46 | - Indentation style detection and preservation
47 | - Git-style diff output with context
48 | - Preview changes with dry run mode
49 | - Failed match debugging with confidence scores
50 | - Inputs:
51 | - `path` (string): File to edit
52 | - `edits` (array): List of edit operations
53 | - `oldText` (string): Text to search for (can be substring)
54 | - `newText` (string): Text to replace with
55 | - `dryRun` (boolean): Preview changes without applying (default: false)
56 | - `options` (object): Optional formatting settings
57 | - `preserveIndentation` (boolean): Keep existing indentation (default: true)
58 | - `normalizeWhitespace` (boolean): Normalize spaces while preserving structure (default: true)
59 | - `partialMatch` (boolean): Enable fuzzy matching (default: true)
60 | - Returns detailed diff and match information for dry runs, otherwise applies changes
61 | - Best Practice: Always use dryRun first to preview changes before applying them
62 |
63 | - **create_directory**
64 | - Create new directory or ensure it exists
65 | - Input: `path` (string)
66 | - Creates parent directories if needed
67 | - Succeeds silently if directory exists
68 |
69 | - **list_directory**
70 | - List directory contents with [FILE] or [DIR] prefixes
71 | - Input: `path` (string)
72 |
73 | - **move_file**
74 | - Move or rename files and directories
75 | - Inputs:
76 | - `source` (string)
77 | - `destination` (string)
78 | - Fails if destination exists
79 |
80 | - **search_files**
81 | - Recursively search for files/directories
82 | - Inputs:
83 | - `path` (string): Starting directory
84 | - `pattern` (string): Search pattern
85 | - `excludePatterns` (string[]): Exclude any patterns. Glob formats are supported.
86 | - Case-insensitive matching
87 | - Returns full paths to matches
88 |
89 | - **get_file_info**
90 | - Get detailed file/directory metadata
91 | - Input: `path` (string)
92 | - Returns:
93 | - Size
94 | - Creation time
95 | - Modified time
96 | - Access time
97 | - Type (file/directory)
98 | - Permissions
99 |
100 | - **list_allowed_directories**
101 | - List all directories the server is allowed to access
102 | - No input required
103 | - Returns:
104 | - Directories that this server can read/write from
105 |
106 | ## Usage with Claude Desktop
107 | Add this to your `claude_desktop_config.json`:
108 |
109 | Note: you can provide sandboxed directories to the server by mounting them to `/projects`. Adding the `ro` flag will make the directory readonly by the server.
110 |
111 | ### Docker
112 | Note: all directories must be mounted to `/projects` by default.
113 |
114 | ```json
115 | {
116 | "mcpServers": {
117 | "filesystem": {
118 | "command": "docker",
119 | "args": [
120 | "run",
121 | "-i",
122 | "--rm",
123 | "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
124 | "--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
125 | "--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
126 | "mcp/filesystem",
127 | "/projects"
128 | ]
129 | }
130 | }
131 | }
132 | ```
133 |
134 | ### NPX
135 |
136 | ```json
137 | {
138 | "mcpServers": {
139 | "filesystem": {
140 | "command": "npx",
141 | "args": [
142 | "-y",
143 | "@modelcontextprotocol/server-filesystem",
144 | "/Users/username/Desktop",
145 | "/path/to/other/allowed/dir"
146 | ]
147 | }
148 | }
149 | }
150 | ```
151 |
152 | ## Build
153 |
154 | Docker build:
155 |
156 | ```bash
157 | docker build -t mcp/filesystem -f src/filesystem/Dockerfile .
158 | ```
159 |
160 | ## License
161 |
162 | This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
163 |
```
--------------------------------------------------------------------------------
/agents/OpenAI_Compatible_API_Agent/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # PrivateGPT OpenAI-Compatible API Agent
2 |
3 | ## Description
4 | The PrivateGPT OpenAI-Compatible API Agent is a client that communicates with a private GPT server and provides an interface to openai-compatible libraries and tools.
5 | It comes in two variations. Variation 1 (*openai_compatible_api.py*) uses the PrivateGPT API directly, Variation 2 (*openai_mcp_api.py*) uses communicates through the PrivateGPT MCP Server.
6 |
7 | ---
8 |
9 | ## Prerequisites
10 | - Python 3.8 or higher
11 | - Access to the PrivateGPT server
12 | - For Variation 2, access to MCP server
13 |
14 | ---
15 |
16 | ## Setup
17 | 1. **Clone the repository:**
18 | ```bash
19 | git clone [https://github.com/Fujitsu-AI/MCP-Server-for-MAS-Developments.git](https://github.com/Fujitsu-AI/MCP-Server-for-MAS-Developments.git)
20 | cd MCP-Server-for-MAS-Developments
21 | ```
22 |
23 | 2. **Optional: Create and activate a virtual environment:**
24 | ```bash
25 | python -m venv venv
26 | ```
27 |
28 | - **Windows:**
29 | ```bash
30 | .\venv\Scripts\activate
31 | ```
32 |
33 | - **Unix/MacOS:**
34 | ```bash
35 | source venv/bin/activate
36 | ```
37 |
38 | 3. **Install dependencies:**
39 | ```bash
40 | pip install -r .\agents\OpenAI_Compatible_API_Agent\requirements.txt
41 | ```
42 |
43 | 4. **Customise configuration file:**
44 |
45 | - 4.1 **OpenAI-Compatible API via PrivateGPT API:**
46 |
47 | Copy the `pgpt_api_proxy.json.example` file to `pgpt_api_proxy.json` e.g. with `cp .\agents\OpenAI_Compatible_API_Agent\pgpt_api_proxy.json.example .\agents\OpenAI_Compatible_API_Agent\pgpt_api_proxy.json`
48 | Make sure that the `pgpt_api_proxy.json` is configured correctly and contains all necessary fields. The file should look like this:
49 | ```json
50 | {
51 | "base_url": "<Url to your private GPT instance>",
52 | "proxy_user": "<Proxy User>",
53 | "proxy_password": "<Proxy Password>",
54 | "access_header": "<Access Header>",
55 | "groups": ["<Groups to access>"],
56 | "language": "en",
57 | "use_public": true,
58 | "api_ip": "0.0.0.0",
59 | "api_port": 8001,
60 | "whitelist_keys": []
61 | }
62 | ```
63 | - 4.2 **OpenAI-Compatible API via MCP Server:**
64 |
65 | Copy the `pgpt_openai_api_mcp.json.example` file to `pgpt_openai_api_mcp.json` e.g. with `cp .\pgpt_openai_api_mcp.json.example .\pgpt_openai_api_mcp.json`
66 | Make sure that the `pgpt_openai_api_mcp.json` is configured correctly and contains all necessary fields. The file should look like this:
67 | ```json
68 | {
69 | "email": "<Your PrivateGPT account>",
70 | "password": "<Your PrivateGPT password>",
71 | "groups": ["<Groups to access>"],
72 | "language": "en",
73 | "api_ip": "0.0.0.0",
74 | "api_port": 8002,
75 | "whitelist_keys": [],
76 | "mcp_server": {
77 | "host": "127.0.0.1",
78 | "port": 5000
79 | }
80 | }
81 | ```
82 |
83 |
84 | 5. **Start the AI agents:**
85 | - 5.1 **Start the OpenAI-compatible API agent that uses the PrivateGPT API directly:**
86 | ```bash
87 | python -m agents.OpenAI_Compatible_API_Agent.Python.openai_compatible_api
88 | ```
89 |
90 | - 5.2 **Start the OpenAI-compatible API agent that uses the MCP server to communicate:**
91 | ```bash
92 | python -m agents.OpenAI_Compatible_API_Agent.Python.openai_mcp_api
93 | ```
94 | - 5.3 **In order to run the OpenAI Compatible Agent with Docker:**
95 | Make sure Docker is installed on your System.
96 | ```bash
97 | cd agents\OpenAI_Compatible_API_Agent
98 | ```
99 | To build and run Docker in Foreground:
100 | ```bash
101 | docker compose up --build
102 | ```
103 | To build and run Docker in Background:
104 | ```bash
105 | docker compose up --build -d
106 | ```
107 |
108 |
109 |
110 | 6. **Generate API key**
111 | Generate a key with the following command:
112 | ```bash
113 | python -m agents.OpenAI_Compatible_API_Agent.Python.generate_api_key --email "<PrivateGPT account>" --password "<PrivateGPT Password>"
114 | ```
115 | This API key can be used for OpenAI compatible Clients. Make sure you either enter it to the config under whitelist_keys (see 4.1 and 4.2) or whitelist_keys is empty (no check, but prone to errors)
116 | ---
117 |
118 | ## Utilisation
119 | - **Use libraries (like litellm, ollama, smolagents) or tools (like Msty) to use PrivateGPT with the OpenAI API interface:**
120 |
121 | Some example usages for external tools:
122 |
123 | - Usage in Msty:
124 | - To use the API in MSTY, add a remote server and add "<http://ip:port>" and your API key
125 |
126 | - Usage in Continue:
127 | - To use the API in Continue (Visual Studio/Pycharm Plugin) add this to your config:
128 | ```json
129 | {
130 | "model": "privategpt",
131 | "title": "PrivateGPT",
132 | "systemMessage": "You are an expert software developer. You give helpful and concise responses.",
133 | "apiKey": "<your-api-key>",
134 | "apiBase": "http://<ip:port>",
135 | "provider": "openai"
136 | }
137 | ```
138 |
139 | - Usage with OpenAI Library:
140 | - See openai_test_client.py for an example.
141 | ---
142 |
143 | ## License
144 | This project is licensed under the MIT License - see the LICENSE file for details.
```
--------------------------------------------------------------------------------
/agents/ChatBotAgent/README.md:
--------------------------------------------------------------------------------
```markdown
1 |
2 | # PrivateGPT ChatBot Agent
3 |
4 | ## Overview
5 | The **PrivateGPT ChatBot Agent** is a crucial component of the Fujitsu PrivateGPT multi-agent system. It acts as a client that communicates with a private GPT server to respond to queries and provide information. This agent leverages both local knowledge databases and server-based responses, employing **FIPA ACL (Agent Communication Language)** to standardize communications within the system.
6 |
7 | ---
8 |
9 | ## Features
10 | - **Multi-Agent Communication via FIPA ACL:**
11 | - Handles structured messages with standardized fields such as `performative`, `sender`, `receiver`, `ontology`, and `content`.
12 | - Sends FIPA ACL failure messages if a connection to the MCP server cannot be established.
13 |
14 | - **Production WSGI Servers: Waitress & Gunicorn:**
15 | - Manages RESTful endpoints (e.g., `/ask`, `/logs`, `/status`) using Flask.
16 | - Uses Waitress for serving requests in Windows environments and Gunicorn for Unix-based systems, ensuring readiness for production environments.
17 | - Implements Cross-Origin Resource Sharing (CORS) to allow requests from any domain (`origins: "*"`) for broad compatibility.
18 |
19 | - **Authentication:**
20 | - All endpoints, except for `OPTIONS` and `/status`, require an API key sent via the `X-API-KEY` header.
21 |
22 | - **MCP Server Connectivity:**
23 | - Ensures connectivity to the MCP server (as defined in `config.json`) is validated before processing requests.
24 |
25 | - **Logging:**
26 | - Maintains detailed logs for both the agent operations (`agent.log`) and the Flask server (`flask.log`).
27 |
28 | ## Prerequisites
29 | - **Python:** Version 3.8 or higher
30 | - **Dependencies:**
31 | Install the required packages listed in the corresponding `requirements.txt` which includes Flask, waitress (for Windows), gunicorn (for Unix-based systems), flask-cors, paho-mqtt, paramiko, etc.
32 |
33 | ---
34 |
35 | ## Setup
36 | 1. **Clone the Repository:**
37 | ```bash
38 | git clone https://github.com/pgpt-dev/MCP-Server-for-MAS-Developments.git
39 | cd MCP-Server-for-MAS-Developments
40 | ```
41 |
42 | 2. **(Optional) Create and Activate a Virtual Environment:**
43 | - **Windows:**
44 | ```bash
45 | python -m venv venv
46 | .\venv\Scripts\activate
47 | ```
48 | - **Unix/MacOS:**
49 | ```bash
50 | python -m venv venv
51 | source venv/bin/activate
52 | ```
53 |
54 | 3. **Install Dependencies:**
55 | ```bash
56 | pip install -r agents/ChatBotAgent/requirements.txt
57 | ```
58 |
59 | 4. **Configure the Agent:**
60 | Copy the example configuration file and adjust it according to your environment:
61 |
62 | ```bash
63 | cp agents/ChatBotAgent/config.json.example agents/ChatBotAgent/config.json
64 | ```
65 |
66 | **Example `config.json`:**
67 |
68 | ```json
69 | {
70 | "email": "<YOUR EMAIL>",
71 | "password": "<YOUR PASSWORD>",
72 | "api_ip": "0.0.0.0",
73 | "api_port": 5001,
74 | "api_key": "<YOUR_API_KEY>",
75 | "mcp_server": {
76 | "host": "172.24.123.123",
77 | "port": 5000
78 | },
79 | "language": "en",
80 | "groups": ["<Your Group>"]
81 | }
82 | ```
83 |
84 | **Note:** All sensitive parameters, such as `email` and `password`, should be securely stored and managed.
85 |
86 | ## Running the Agent
87 | - **Using Waitress (Windows):**
88 | To start the ChatBot Agent, ensure you are in the repository's root directory and execute:
89 |
90 | ```bash
91 | python -m agents.ChatBotAgent.Python.chatbot_agent
92 | ```
93 |
94 | - **Using Gunicorn (Unix-based systems):**
95 | To start the application using Gunicorn, run the following command:
96 |
97 | ```bash
98 | gunicorn -w 4 -b 0.0.0.0:5001 agents.ChatBotAgent.Python.chatbot_agent:app
99 | ```
100 |
101 | This command launches the Flask API server using Gunicorn on the configured `api_ip` and `api_port` and uses multiple workers to handle requests efficiently. The `fcntl` package is needed to run this under Linux, use `pip` to install it.
102 |
103 | ---
104 |
105 | ## API Endpoints
106 |
107 | ### `/ask` (POST)
108 | - **Purpose:**
109 | Accepts questions for the ChatBot Agent. This endpoint supports both a **FIPA ACL** structured message and a legacy JSON format.
110 |
111 | - **Authentication:**
112 | Requires the `X-API-KEY` header with the correct API key.
113 |
114 | - **FIPA ACL Request Example:**
115 |
116 | ```json
117 | {
118 | "performative": "request",
119 | "sender": "IoT_MQTT_Agent",
120 | "receiver": "Chatbot_Agent",
121 | "ontology": "fujitsu-iot-ontology",
122 | "content": {
123 | "question": "What is the system status?",
124 | "usePublic": false,
125 | "groups": ["group1"],
126 | "language": "en"
127 | }
128 | }
129 | ```
130 |
131 | - **Legacy JSON Request Example:**
132 |
133 | ```json
134 | {
135 | "question": "What is the system status?",
136 | "usePublic": false,
137 | "groups": ["group1"],
138 | "language": "en"
139 | }
140 | ```
141 |
142 | - **Response:**
143 | Returns a JSON object containing the answer generated by the PrivateGPT server. If the MCP server connection fails, a FIPA ACL failure message is returned.
144 |
145 | ### `/logs` (GET)
146 | - **Purpose:**
147 | Provides access to the Flask server's log file (`flask.log`) for debugging and monitoring purposes.
148 |
149 | ### `/status` (GET)
150 | - **Purpose:**
151 | Outputs a simple JSON message confirming that the agent is operational. This endpoint does **not** require authentication.
152 |
153 | ---
154 |
155 | ## Multi-Agent Communication & FIPA ACL
156 | The ChatBot Agent utilizes **FIPA ACL** to structure its communications with other agents, ensuring reliable interactions within a multi-agent system. It provides standardized message fields for consistency and effective communication.
157 |
158 | ---
159 |
160 | ## Logging & Debugging
161 | - **Agent Logs:**
162 | Key events, errors, and status updates are logged in `agent.log`.
163 |
164 | - **Flask Logs:**
165 | Logs specific to the Flask server are stored in `flask.log`.
166 |
167 | These logs are critical for troubleshooting and provide insights into the agent's operation.
168 |
169 | ---
170 |
171 | ## Example Conversation
172 | ```plaintext
173 | 🎉 Welcome to the PrivateGPT ChatBot Agent.
174 | You: What is your name?
175 | Agent: I am the PrivateGPT ChatBot Agent.
176 | You: Provide system status.
177 | Agent: The system is running normally.
178 | ```
179 |
180 | ---
181 |
182 |
183 |
```
--------------------------------------------------------------------------------
/agents/AgentMonitoring/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # README
2 |
3 | ## Overview
4 | To monitor the three different **agents**, each providing Prometheus metrics so they can be monitored in **Prometheus** and visualized in **Grafana**:
5 |
6 | 1. **OpenAI-Compatible API Agent**
7 | - By default runs on **port 7777** and serves `/metrics`.
8 | 2. **Chatbot Agent**
9 | - Runs on **port 5001** (by default), and also exposes `/metrics` (or configurable via JSON).
10 | 3. **IoT MQTT Agent**
11 | - Runs on a **Prometheus port** specified in its JSON config (e.g., `9101`), providing `/metrics` via a custom WSGI server.
12 |
13 | ### Requirements
14 | - Install each agent’s dependencies (e.g., via `pip install -r requirements.txt`), including the **`prometheus_client`** library.hon 3.8+** is
15 | - You need **Prometheus** and **Grafana** set up to ingest and display these metrics.
16 |
17 | ---
18 |
19 | ## 1. OpenAI-Compatible API Agent
20 | - By default, runs on **port 7777**.
21 | - `/metrics` will be served at **`http://<host>:7777/metrics`**.
22 |
23 | ### How to Start
24 | Switch to the agent’s directory and start the agent as desribed in the agent's `README.md`
25 |
26 | You should see in the logs something like:
27 | ```
28 | Starting API on http://0.0.0.0:7777
29 | Starting Prometheus metrics server on port 7777...
30 | ```
31 |
32 | ### Metrics
33 | - Typical metrics might include:
34 | - `request_count{method,endpoint}`
35 | - `request_latency_seconds{method,endpoint}`
36 | - `chat_completion_count`
37 | - `completion_count`
38 | - etc.
39 |
40 | **Note:** Search and select the metrics that suit you in the Grafana dashboard.
41 |
42 | ---
43 |
44 | ## 2. Chatbot Agent
45 | - Runs on **port 5001** by default.
46 | - Also serves Prometheus metrics under **`http://<host>:5001/metrics`** (or whichever port is in use).
47 |
48 | ### How to Start
49 | Switch to the agent’s directory and start the agent as desribed in the agent's `README.md`
50 |
51 | You’ll see logs like:
52 | ```
53 | Starting API server on 0.0.0.0:5001
54 | Starting Prometheus WSGI server on port 5001...
55 | ```
56 | Then `/metrics` is accessible.
57 |
58 | ### Metrics
59 | - Common metrics:
60 | - `request_count` / `request_latency_seconds`
61 | - `agent_ask_count`
62 | - etc.
63 |
64 | **Note:** Search and select the metrics that suit you in the Grafana dashboard.
65 |
66 | ---
67 |
68 | ## 3. IoT MQTT Agent
69 | - Reads a **port** from its JSON config (`pgpt_iot_agent.json`), e.g.:
70 |
71 | ```json
72 | {
73 | "metrics": {
74 | "port": 9101
75 | }
76 | ...
77 | }
78 | ```
79 |
80 | - The agent starts a small WSGI server on `metrics.port` and exposes `/metrics`.
81 |
82 | ### How to Start
83 | Switch to the agent’s directory and start the agent as desribed in the agent's `README.md`
84 |
85 | Logs should show:
86 | ```
87 | Starting Prometheus WSGI server on port 9101...
88 | ```
89 | Hence `http://<host>:9101/metrics` gives the metrics.
90 |
91 | ### Metrics
92 | - For example:
93 | - `mqtt_message_count` (number of MQTT messages received)
94 | - `mqtt_message_latency_seconds` (histogram measuring processing latency)
95 |
96 | **Note:** Search and select the metrics that suit you in the Grafana dashboard.
97 |
98 | ---
99 |
100 | ## 4. Prometheus Configuration
101 | To let Prometheus scrape these metrics, add **targets** for all three agents in your `prometheus.yml`. For example:
102 |
103 | ```yaml
104 | global:
105 | scrape_interval: 15s
106 | evaluation_interval: 15s
107 |
108 | scrape_configs:
109 |
110 | # 1) OpenAI-Compatible API Agent
111 | - job_name: "openai_compatible_agent"
112 | scrape_interval: 5s
113 | static_configs:
114 | - targets:
115 | - "192.168.123.123:7777" # your openai compatible API agent ip and port
116 |
117 | # 2) Chatbot Agent
118 | - job_name: "chatbot_agent"
119 | scrape_interval: 5s
120 | static_configs:
121 | - targets:
122 | - "192.168.123.123:5001" # your chatbot ip and port
123 |
124 | # 3) IoT MQTT Agent
125 | - job_name: "iot_mqtt_agent"
126 | scrape_interval: 5s
127 | static_configs:
128 | - targets:
129 | - "192.168.123.123:9101" # your IoT agent ip and port
130 | ```
131 |
132 | > Change **`192.168.123.123`** to your actual IP or hostname; use `localhost` (`127.0.0.1`) if everything is local.
133 | > And verify the ports:
134 | > - **`7777`** (OpenAI-Compatible)
135 | > - **`5001`** (Chatbot)
136 | > - **`9101`** (IoT)
137 |
138 | Once Prometheus is running (e.g., via Docker or binary), navigate to `http://<prometheus-host>:9090/targets` and confirm all three jobs appear and show **UP**:
139 |
140 | 
141 |
142 | ---
143 |
144 | ## 5. Grafana Dashboards
145 | This repo provides **Grafana Dashboard JSON** files for each agent. You can import them to visualize the metrics.
146 |
147 | ### A) OpenAI-Compatible API Agent Dashboard
148 | - File: `OpenAI compatible API - Agent Dashboard Example - Grafana.json` (example)
149 | - Contains panels such as:
150 | - *Request Count (rate)*
151 | - *Request Latency (p95)*
152 | - *Chat Completion Count*
153 | - and more.
154 |
155 | #### Import Procedure
156 | 1. In Grafana: **Dashboards** → **Import**.
157 | 2. Paste the JSON from `OpenAI compatible API - Agent Dashboard Example - Grafana.json`.
158 | 3. Select your **Prometheus** data source.
159 | 4. Click **Import**.
160 |
161 | ### B) Chatbot Agent Dashboard
162 | - File: `ChatBot-Agent Dashboard Example - Grafana.json`.
163 | - Shows metrics such as `agent_ask_count`, `request_latency_seconds`, etc.
164 |
165 | #### Import Steps
166 | 1. Go to Grafana → **Import**.
167 | 2. Paste the JSON content.
168 | 3. Select your Prometheus data source.
169 | 4. Save the dashboard.
170 |
171 | Example below:
172 |
173 | 
174 |
175 | ### C) IoT MQTT Agent Dashboard
176 | - File: `IoT-Agent Dashboard Example - Grafana.json`.
177 | - Example panels:
178 | - Rate of MQTT messages (`rate(mqtt_message_count[1m])`)
179 | - Total MQTT messages
180 | - Latencies (e.g., 95th percentile for `mqtt_message_latency_seconds_bucket`)
181 |
182 | #### Import Steps
183 | Identical approach:
184 | 1. **Dashboards** → **Import**.
185 | 2. Paste JSON from `IoT-Agent Dashboard Example - Grafana.json`.
186 | 3. Pick **Prometheus** as the data source.
187 |
188 | ---
189 |
190 | ## 6. Parameters to Adjust
191 | 1. **Agent Ports**
192 | - Update ports in the respective JSON configs or Python code to avoid port collisions.
193 | - Defaults:
194 | - **OpenAI-Compatible**: `7777`
195 | - **Chatbot**: `5001`
196 | - **IoT**: `9101` (via `metrics.port` in JSON)
197 |
198 | 2. **Prometheus `prometheus.yml`**
199 | - Change the **targets** to match your IP addresses/ports.
200 | - Adjust `scrape_interval` if needed (default is 15s).
201 |
202 | 3. **Grafana**
203 | - When importing each JSON, make sure to choose **the correct Prometheus data source** if you have multiple.
204 | - If panels show “No data,” double-check that Prometheus is indeed scraping the relevant metrics.
205 |
206 | ---
207 |
208 | ## 7. Troubleshooting
209 | - **“No data”** in Grafana:
210 | - Check Prometheus at `/targets` to see if the jobs are **UP**.
211 | - Check Prometheus’s expression browser for the metrics (e.g., `mqtt_message_count`).
212 | - **Port collisions**:
213 | - If `7777`, `5001`, `9101` are already in use, adjust them in code/JSON.
214 | - **Authentication errors**:
215 | - If the agent has an API key for `/metrics`, you may need to disable that or specifically allow `/metrics` to be unauthenticated.
216 | - **Docker environment**:
217 | - Ensure you map the correct ports (e.g., `-p 5001:5001`) and use the correct IP addresses.
218 |
219 | ---
220 |
221 | ## Conclusion
222 | With these three agents, you can gather both **LLM-related** (OpenAI-Compatible & Chatbot) and **IoT-related** (MQTT agent) metrics in **Prometheus**, then visualize everything in **Grafana** using the provided dashboards. Enjoy your fully monitored environment!
```
--------------------------------------------------------------------------------
/agents/ISMAgent/PGPT Scenario Prompts/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # ISM Prompt Suite – *Detecting Error State*
2 |
3 | > **Purpose:** This documentation describes the complete prompt configuration for the ISM Logfile Analysis scenario.
4 | > It includes the **System Prompt**, **User Pre-Prompt**, and **User Post-Prompt**, along with configuration parameters — enabling full automation of IT error detection and operational insight generation.
5 |
6 | ---
7 |
8 | # ISM System Prompt – Detecting Error State
9 |
10 | ## Overview
11 | The **ISM System Prompt** defines an intelligent AI assistant specialized in **analyzing raw IT infrastructure logs** to automatically identify **nodes with active error alarms**.
12 | It aims to achieve **data integrity, completeness, and operational relevance** by producing a **validated, structured operational summary**.
13 |
14 | This is the foundation for automated incident analysis, data quality validation, and IT operations optimization.
15 |
16 | ---
17 |
18 | ## Objective
19 | Extract and summarize **all nodes currently in an Error state**, highlighting their **location, system category, operational status, and recommended actions**.
20 |
21 | The assistant scans unstructured log text, detects nodes with alarm errors, and outputs a **clean, structured, non-Markdown table** — ready for dashboards or operational reporting.
22 |
23 | ---
24 |
25 | ## Core Logic
26 |
27 | ### Error Detection Patterns
28 | ```
29 | Alarm Status: Error
30 | Alarm: Error
31 | Alarm Level: Error
32 | Alarm = Error
33 | ```
34 | (case-insensitive, including equivalent variants)
35 |
36 | ### Completeness Rules
37 | - Every node with an Error alarm must appear in the output.
38 | - Missing nodes trigger an automatic re-scan.
39 | - No fabricated or inferred nodes (e.g., no “cx184” if only “cx183” exists).
40 | - Duplicates are removed.
41 |
42 | ### Validity Rules
43 | - Only nodes explicitly present in the input text are included.
44 | - Missing fields → `N/A`.
45 | - Each node listed once, in a single-line format.
46 | - No value propagation between similar node names.
47 | - Node authenticity is strictly enforced.
48 |
49 | ---
50 |
51 | ## Output Specification
52 |
53 | ### Columns
54 | | # | Node Name | Category | Model | Location | Group | Alarm Status | Status | Power | Detected Issue | Recommended Action |
55 |
56 | ### Output Rules
57 | - Include only nodes with Error alarms.
58 | - Sort by **Group** or **Location**.
59 | - Highlight alarm terms like **Error** in bold.
60 | - Fill missing attributes with `N/A`.
61 | - Keep compact, human-readable output.
62 |
63 | ---
64 |
65 | ## Validation Workflow
66 |
67 | 1. **Scan** input for all Error patterns.
68 | 2. **Extract** each unique node name linked to an Error alarm.
69 | 3. **Count** total unique nodes.
70 | 4. **Validate** the output table to ensure a 1:1 match.
71 | 5. **Recheck** and correct discrepancies automatically.
72 |
73 | ---
74 |
75 | ## Example
76 |
77 | ### Input
78 | ```
79 | Node: cx182 | Model: R740 | Location: Berlin | Group: Core | Alarm Status: Error | Power: On | Status: Degraded
80 | Node: cx183 | Model: R640 | Location: Hamburg | Group: Edge | Alarm Status: OK
81 | Node: cx184 | Model: R740 | Location: Berlin | Group: Core | Alarm: Error | Power: Off
82 | ```
83 |
84 | ### Output
85 | ```
86 | # | Node Name | Category | Model | Location | Group | Alarm Status | Status | Power | Detected Issue | Recommended Action
87 | 1 | cx182 | Server | R740 | Berlin | Core | **Error** | Degraded | On | Performance degradation | Review hardware logs
88 | 2 | cx184 | Server | R740 | Berlin | Core | **Error** | N/A | Off | Power failure | Inspect PSU and restart
89 | ```
90 |
91 | ---
92 |
93 | # ISM User Pre-Prompt – Detecting Error State
94 |
95 | ## Overview
96 | The **User Pre-Prompt** defines the intent and task focus within the ISM scenario.
97 | It ensures the assistant delivers a **precise, actionable summary** of all nodes currently in an **Error** state — ready for immediate IT response.
98 |
99 | ---
100 |
101 | ## Objective
102 | Create a **focused operational summary** of error nodes, detailing **location**, **affected systems**, and **next actions**.
103 |
104 | ---
105 |
106 | ## Scope
107 | Include only:
108 | ```
109 | AlarmStatus = Error
110 | ```
111 |
112 | ### For each node include:
113 | - **Identification** → Node, Type, Model, Location, Group
114 | - **Operational State** → Status & Power
115 | - **Detected or Inferred Issue**
116 | - **Recommended Next Step**
117 |
118 | ---
119 |
120 | ## Deliverable
121 | A **non-Markdown structured table**, sorted by **Group** or **Location**.
122 |
123 | ### Output Rules
124 | - Each node = one row.
125 | - Missing data → `N/A`.
126 | - Highlight “Error” conditions.
127 | - Format suitable for dashboards.
128 |
129 | ### Example
130 | ```
131 | # | Node | Type | Model | Location | Group | Alarm Status | Status | Power | Issue | Next Step
132 | 1 | cx182 | Server | R740 | Berlin | Core | **Error** | Degraded | On | Disk issue | Replace failed disk
133 | 2 | cx184 | Server | R740 | Berlin | Core | **Error** | Down | Off | Power issue | Inspect PSU and reboot
134 | ```
135 |
136 | ---
137 |
138 | # ISM User Post-Prompt – Detecting Error State
139 |
140 | ## Overview
141 | The **User Post-Prompt** finalizes the output process by performing **data validation**, **impact summarization**, and **executive-level action recommendations**.
142 |
143 | It ensures that what’s reported is **accurate**, **verified**, and **ready for decision-making**.
144 |
145 | ---
146 |
147 | ## Objective
148 | After the table is generated:
149 | 1. **Validate** that the number of Error nodes matches the table rows.
150 | 2. **Summarize** which groups or systems are most impacted.
151 | 3. **Provide** clear next actions for IT teams.
152 |
153 | ---
154 |
155 | ## Functional Steps
156 |
157 | ### Validation Phase
158 | - Recount `Alarm Status: Error` nodes in the source text.
159 | - Ensure count matches the number of output rows.
160 | - Report missing, duplicate, or extra nodes.
161 |
162 | ### Summary Phase
163 | Summarize:
164 | - Total affected nodes
165 | - Most impacted Groups / Locations
166 | - Common issue patterns (e.g., power, RAM, chassis)
167 | - Critical nodes (`Power = Off` and `Status = Error`)
168 |
169 | ### Insight Phase
170 | Produce a 3–5 sentence **executive summary** describing what IT should do next.
171 |
172 | ---
173 |
174 | ## Output Format
175 |
176 | ### Structure
177 | 1. Validated Table (structured, not Markdown)
178 | 2. Markdown section → `### Summary and Next Actions`
179 |
180 | ### Example
181 | ```
182 | # | Node | Model | Location | Group | Alarm | Power | Issue | Action
183 | 1 | cx182 | R740 | Berlin | Core | **Error** | On | Disk failure | Replace failed disk
184 | 2 | cx184 | R740 | Berlin | Core | **Error** | Off | Power issue | Inspect PSU and restart
185 |
186 | ---
187 | ### Summary and Next Actions
188 | - 2 nodes affected (Berlin/Core)
189 | - Common issues: Disk & Power
190 | - 1 node critical (Power Off)
191 | - Immediate: Replace failed components, verify redundancy
192 | ```
193 |
194 | ---
195 |
196 | # Scenario Parameter Configuration
197 |
198 | | **Parameter** | **Description** | **Recommended Value** | **Notes** |
199 | |----------------|-----------------|------------------------|------------|
200 | | **Visibility** | Enable scenario for all users | `On` | Makes it globally available |
201 | | **Scenario Name** | Short identifier | `<Choose a name>` | Use clear internal naming |
202 | | **Description** | Short summary | `ISM Logfile Analysis` | Displayed in scenario list |
203 | | **Creativity** | Controls response variability | `1` | `1` = consistent, `4` = creative |
204 | | **Use History** | Enables chat memory | `Off` | Keep Off for consistency |
205 | | **Number of Chunks** *(Vector Store)* | Retrieved text chunks | `20` | Broader context = slower responses |
206 | | **Similarity Threshold** *(Vector Store)* | Relevance precision | `0` | `0` = broad search, `0.9999` = strict |
207 | | **Hybrid Search** *(Vector Store)* | Keyword + semantic combo | `Off` | Enable for fuzzy queries |
208 | | **Keyword Search** *(Vector Store)* | Exact matching | `On` | Ideal for log analysis |
209 | | **Semantic Search** *(Vector Store)* | Conceptual matching | `Off` | For natural-language queries |
210 | | **Reranking** *(Vector Store)* | Improves relevance | `On` | Prioritizes most relevant results |
211 |
212 | ---
213 |
214 | ## Full ISM Prompt Workflow
215 | ```
216 | System Prompt → Context Input → User Pre-Prompt → Chat Message → User Post-Prompt
217 | ```
218 |
219 | Each layer refines how the AI processes, validates, and delivers insights — ensuring **complete operational accuracy**.
220 |
221 | ---
222 |
223 |
224 |
```
--------------------------------------------------------------------------------
/agents/ISMAgent/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # Fujitsu PrivateGPT ISM Agent
2 |
3 | The **ISM Agent** is a Python-based automation component that processes Infrastructure and Server Management (ISM) data, analyzes node information, and generates descriptive, human-readable reports via an integrated Chatbot Agent.
4 | It uses structured, emoji-safe logging for clean console and NDJSON outputs, and follows the FIPA ACL (Agent Communication Language) standard for interoperability in multi-agent ecosystems.
5 |
6 | ---
7 |
8 | ## Features
9 |
10 | - **Structured Logging (IoT-Style)**
11 | Aligned, emoji-safe console logs with NDJSON support for downstream analytics.
12 |
13 | - **Config-Driven Operation**
14 | All input, output, and log paths are configurable via `config.json`.
15 |
16 | - **PDF and JSON Input**
17 | Reads ISM node data from JSON files or embedded JSON inside PDFs.
18 |
19 | - **FIPA ACL Communication**
20 | Requests technical, language-based descriptions for each node from a Chatbot Agent via FIPA ACL payloads.
21 |
22 | - **Retry & Backoff**
23 | Robust retry with exponential backoff for transient network errors.
24 |
25 | - **Structured Output Reports**
26 | Generates text reports that summarize each node and writes them to an output file.
27 |
28 | - **Optional NDJSON Event Log**
29 | Machine-readable event stream for observability and audit trails.
30 |
31 | - **NEW: Optional SFTP Upload**
32 | After the report is written, the agent can **upload the output file to a remote SFTP server**.
33 | The agent **creates the remote directory path if it does not exist** (recursive, idempotent).
34 |
35 | ---
36 |
37 | ## How It Works
38 |
39 | 1. **Configuration Loading**
40 | The agent loads `config.json`.
41 |
42 | 2. **Health Check (optional)**
43 | If `chatbot_agent.health_url` is provided, a quick GET is performed (non-blocking).
44 |
45 | 3. **Input Read & Archive**
46 | ISM nodes are read from JSON (or from embedded JSON in a PDF).
47 | On successful read, the input file is archived into `paths.archive_dir` with a sequential suffix (e.g., `ism_nodes.json.001`).
48 |
49 | 4. **Per-Node Processing**
50 | For each node, parameters are normalized and a FIPA ACL request is sent to the Chatbot Agent.
51 | Responses are appended to an in-memory list; optional per-node dumps are written to `paths.dump_json_dir`.
52 |
53 | 5. **Report Write**
54 | The aggregated text is written/appended to `paths.output`.
55 |
56 | 6. **(Optional) SFTP Upload**
57 | If `sftp.enabled` is `true`, the output file is uploaded via SFTP:
58 | - The agent **ensures the remote directory exists** by creating all missing path segments before upload.
59 | - The remote file name can be overridden or defaults to the local file name.
60 |
61 | 7. **Exit Codes**
62 | The agent exits non-zero on critical failures (e.g., unreadable input, failed write). SFTP upload errors are **logged but do not fail** the run unless you explicitly gate on them externally.
63 |
64 | ---
65 |
66 | ## Configuration
67 |
68 | Create or edit `agents/ISMAgent/config.json`. Minimal structure:
69 |
70 | ## 🧾 Configuration Reference (Parameters within `<>` have to be set according your configuration)
71 |
72 | ```json
73 | {
74 | "meta": {
75 | "agent_name": "ISM Agent",
76 | "version": "1.0.1",
77 | "created": "2025-10-30",
78 | "description": "Fixed configuration for the ISM Agent demo setup."
79 | },
80 | "paths": {
81 | "input": "agents/ISMAgent/data/ism_nodes.json",
82 | "inventory": "agents/ISMAgent/data/ism_inventory.json",
83 | "output": "agents/ISMAgent/output/ism_nodes_report.txt",
84 | "ndjson": "agents/ISMAgent/logs/ism_agent.ndjson",
85 | "dump_json_dir": "agents/ISMAgent/logs/node_json",
86 | "archive_dir": "agents/ISMAgent/archive"
87 | },
88 | "chatbot_agent": {
89 | "api_url": "http://127.0.0.1:5001/ask",
90 | "api_key": "<API_KEY>",
91 | "use_public": false,
92 | "groups": ["<YOUR GROUP 1>", "<YOUR GROUP 2>", "<YOUR GROUP xyz>"],
93 | "timeout_seconds": 20,
94 | "prompt_template": "Generate a concise, detailed technical report in a single paragraph (in {language_code}) based on the merged node data. Explicitly include the Model, Status, CPU Summary (count, model, speed), Memory Summary (total size, frequency), Storage Summary (type, capacity), Supported OS List, Firmware Details, and any detected Hardware Issues or Alerts (AlarmStatus). Node data: {json_data}"
95 | },
96 | "sftp": {
97 | "enabled": true,
98 | "host": "<SFTP_HOST>",
99 | "port": <PORT>,
100 | "username": "<SFTP_USER>",
101 | "password": "<SFTP_PASSWORD>",
102 | "remote_path": "/<GROUP_NAME>",
103 | "remote_filename": null
104 | },
105 | "language": "en"
106 | }
107 | ```
108 |
109 |
110 | ### SFTP Options (details)
111 |
112 | | Key | Type | Default | Description |
113 | |-------------------|----------|---------|-------------|
114 | | `enabled` | boolean | `false` | Enable/disable SFTP upload stage. |
115 | | `host` | string | — | SFTP server hostname/IP. |
116 | | `port` | integer | `22` | SFTP port. |
117 | | `username` | string | — | Login user. |
118 | | `password` | string | — | Login password (or use key-based auth by extending the code if desired). |
119 | | `remote_path` | string | `"/"` | **Target directory path on the SFTP server.** If it does not exist, the agent **creates it recursively**. The `remote_path` must correspond to an existing group of the PGPT user. Otherwise, the data will not be automatically imported. The user's SFTP access must also be activated at PGPT and the password for SFTP must be set.|
120 | | `remote_filename` | string\|null | `null` | Optional override for the uploaded file name. If `null` or omitted, the local output file name is used. |
121 |
122 |
123 | > **Directory creation behavior:**
124 | > Before uploading, the agent computes the final `remote_path/remote_filename` and **ensures the parent directory exists**, creating any missing segments (e.g., `/upload/ism/reports/2025/10`). This is safe and idempotent.
125 |
126 | ### Security Notes
127 |
128 | - Prefer **secrets management** for credentials (e.g., environment variables or vaults).
129 | - If possible, use **key-based authentication** on the SFTP server (extend the code to load a private key via Paramiko).
130 | - Restrict SFTP accounts to a chrooted home and least privileges.
131 | - Consider rotating `api_key` and SFTP credentials regularly.
132 |
133 | ---
134 |
135 | ## PowerShell Launcher Script (`start_ism_agent.ps1`)
136 |
137 | The provided PowerShell wrapper offers a Windows-friendly way to execute the agent without juggling Python arguments.
138 |
139 | ### Parameters
140 |
141 | | Parameter | Type | Default | Description |
142 | |-------------|---------|--------------------------------------|-------------|
143 | | `ConfigPath`| string | `agents\ISMAgent\config.json` | Path to the configuration file. |
144 | | `VerboseLog`| switch | `$false` | Enables `--verbose` for detailed logs. |
145 | | `Language` | string | `""` | Overrides language (e.g., `en`, `de`). |
146 | | `Delay` | double | `0.5` | Inter-request delay passed to the agent. |
147 |
148 | ### What the script does
149 |
150 | 1. Forces **UTF-8** output (PowerShell + Python).
151 | 2. Installs/updates Python dependencies from `agents\ISMAgent\requirements.txt` (includes `paramiko` for SFTP).
152 | 3. Validates config file presence.
153 | 4. Builds arguments and runs:
154 | ```powershell
155 | python -m agents.ISMAgent.Python.ism_agent --config agents\ISMAgent\config.json
156 | ```
157 | 5. Surfaces success/failure based on the agent’s exit code.
158 |
159 | ### Example Usage
160 |
161 | ```powershell
162 | # Start with default config
163 | .\start_ism_agent.ps1
164 |
165 | # Verbose logging
166 | .\start_ism_agent.ps1 -VerboseLog
167 |
168 | # Different config path
169 | .\start_ism_agent.ps1 -ConfigPath "C:\custom\ism_config.json"
170 |
171 | # German language and 1.0s delay
172 | .\start_ism_agent.ps1 -Language "de" -Delay 1.0
173 | ```
174 |
175 | ---
176 |
177 | ## SFTP in Practice
178 |
179 | ### Prerequisites
180 |
181 | - Python dependency: **paramiko** (should be in `requirements.txt`).
182 | If needed:
183 | ```bash
184 | pip install paramiko
185 | ```
186 |
187 | - Network/firewall allows outbound TCP **22** (or your custom port) to the SFTP server.
188 |
189 | ### Typical Workflow
190 |
191 | 1. Configure the `sftp` block in `config.json`.
192 | 2. Run the agent (e.g., via `start_ism_agent.ps1`).
193 | 3. After the report is written to `paths.output`, the agent:
194 | - Builds the target `remote_path` + `remote_filename` (or uses the local file name).
195 | - **Ensures** the parent directory exists on the server (recursively creates missing folders).
196 | - Uploads the file via SFTP.
197 | 4. Success or errors are logged to console and NDJSON log.
198 | - **Note:** SFTP failures **do not fail** the overall run; they are warned and recorded so you can retry externally.
199 |
200 | ### Example SFTP Config Variants
201 |
202 | **A) Simple flat folder**
203 | ```json
204 | "sftp": {
205 | "enabled": true,
206 | "host": "sftp.example.org",
207 | "port": 22,
208 | "username": "uploader",
209 | "password": "secret",
210 | "remote_path": "/upload/ism/reports"
211 | }
212 | ```
213 |
214 | **B) Dated roll-up with custom filename**
215 | ```json
216 | "sftp": {
217 | "enabled": true,
218 | "host": "10.0.0.10",
219 | "username": "ci",
220 | "password": "ci-password",
221 | "remote_path": "/<insert groupname PGPT>",
222 | "remote_filename": "ism_nodes_report_2025-10-26.txt.example"
223 | }
224 | ```
225 |
226 | ---
227 |
228 | ## Logs & Observability
229 |
230 | - **Console**: human-readable, emoji-safe aligned messages.
231 | - **NDJSON** (`paths.ndjson`): per-event records, e.g.:
232 | - `nodes_loaded`, `node_processing`, `report_written`, `sftp_upload_ok`, `sftp_upload_failed`, `sftp_mkdir`, etc.
233 |
234 | You can ingest NDJSON into your observability stack (Elastic, Loki, etc.).
235 |
236 | ---
237 |
238 | ## Troubleshooting
239 |
240 | - **“Input file not found”**
241 | Check `paths.input` and working directory. The launcher script prints your config path.
242 |
243 | - **Chatbot timeouts**
244 | Increase `chatbot_agent.timeout_seconds`; verify `api_url` reachability and API key.
245 |
246 | - **SFTP upload skipped**
247 | Ensure `sftp.enabled` is true and **all required fields** are provided (`host`, `username`, `password`, `remote_path`). See logs for `sftp_skipped`.
248 |
249 | - **SFTP directory missing**
250 | The agent **creates it automatically**. If it still fails, check permissions of the SFTP account and server chroot settings.
251 |
252 | - **Unicode in Windows console**
253 | Use Windows Terminal or ensure UTF-8 output:
254 | ```powershell
255 | [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
256 | ```
257 |
258 | ---
259 |
260 | ## Development Notes
261 |
262 | - Code style: robust error handling, clear logging, retries with capped backoff.
263 | - Input archive: moves the consumed input to `paths.archive_dir` with incremental suffix.
264 | - The SFTP code is written to be idempotent and tolerant of race conditions during directory creation.
265 |
266 | ---
267 |
268 |
```
--------------------------------------------------------------------------------
/clients/Go/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # MCP Client Examples (Go)
2 | This repository contains examples for interacting with the MCP server using **Go**. Each console application demonstrates a specific operation and its corresponding server interaction.
3 |
4 | ## Main Menu
5 | Choose an operation from the list below. Each example demonstrates a specific server interaction.
6 |
7 | ### 1. Authentication
8 | [1.1 Login User](#10-mcploginclient)
9 | [1.2 Logout User](#12-mcplogoutclient)
10 |
11 | ### 2. Chat Operations
12 | [2.1 Start a New Chat](#20-mcpchatclient)
13 | [2.2 Continue a Chat Session](#21-mcpcontinuechatclient)
14 | [2.3 Retrieve Chat Info](#22-mcpgetchatinfoClient)
15 |
16 | ### 3. Source Management
17 | [3.1 Create a New Source](#30-mcpcreatesourceclient)
18 | [3.2 Retrieve Source Details](#31-mcpgetsourceclient)
19 | [3.3 List All Sources in a Group](#32-mcplistsourcesclient)
20 | [3.4 Edit an Existing Source](#33-mcpeditsourceclient)
21 | [3.5 Delete a Source](#34-mcpdeletesourceclient)
22 |
23 | ### 4. Group Management
24 | [4.1 List All Groups](#40-mcplistgroupsclient)
25 | [4.2 Create/Update a Group](#41-mcpstoregroupclient)
26 | [4.3 Delete a Group](#42-mcpdeletegroupclient)
27 |
28 | ### 5. User Management
29 | [5.1 Create/Update a User](#50-mcpstoreuserclient)
30 | [5.2 Edit User Details](#51-mcpedituserclient)
31 | [5.3 Delete a User](#52-mcpdeleteuserclient)
32 |
33 | ---
34 |
35 |
36 | ### 1.0 MCPLoginClient
37 | - **Purpose**: Handles user authentication by sending login requests to the MCP server.
38 |
39 | - **Main Features**:
40 | - Sends a `login` command to the server with user credentials.
41 | - Handles JSON-based requests and parses the server's response.
42 |
43 | - **Key Arguments**:
44 | - `--server-ip`: IP address of the MCP server.
45 | - `--server-port`: Port number of the MCP server.
46 | - `--email`: User email for authentication.
47 | - `--password`: User password for authentication.
48 |
49 | - **Usage Example**:
50 | ```bash
51 | MCPLoginClient.exe --server-ip 127.0.0.1 --server-port 1234 --email [email protected] --password secret
52 | ```
53 |
54 | ### 1.2 MCPLogoutClient
55 | - **Purpose**: Logs out an authenticated user by invalidating their session token.
56 |
57 | - **Main Features**:
58 | - Sends a `logout` command to the server.
59 | - Invalidates the token provided in the request.
60 |
61 | - **Key Arguments**:
62 | - `--server-ip`: IP address of the MCP server.
63 | - `--server-port`: Port number of the MCP server.
64 | - `--token`: Authentication token to be invalidated.
65 |
66 | - **Usage Example**:
67 | ```bash
68 | MCPLogoutClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken
69 | ```
70 |
71 | ---
72 |
73 | ### 2.0 MCPChatClient
74 | - **Purpose**: Initiates a new chat session with the MCP server.
75 |
76 | - **Main Features**:
77 | - Sends a `chat` command to the server with a question.
78 | - Supports optional parameters for public chats, groups, and language.
79 |
80 | - **Key Arguments**:
81 | - `--server-ip`: IP address of the MCP server.
82 | - `--server-port`: Port number of the MCP server.
83 | - `--token`: Authentication token.
84 | - `--question`: Initial question for the chat session.
85 | - `--use-public`: Optional flag for public chat.
86 | - `--groups`: Optional group list.
87 | - `--language`: Optional language parameter.
88 |
89 | - **Usage Example**:
90 | ```bash
91 | MCPChatClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --question "Hello World" --use-public --groups "devops,hr" --language en
92 | ```
93 |
94 | ### 2.1 MCPContinueChatClient
95 | - **Purpose**: Continues an existing chat session by sending follow-up messages.
96 |
97 | - **Main Features**:
98 | - Sends a `continue_chat` command to the server.
99 | - Provides the conversation ID and follow-up message.
100 |
101 | - **Key Arguments**:
102 | - `--server-ip`: IP address of the MCP server.
103 | - `--server-port`: Port number of the MCP server.
104 | - `--token`: Authentication token.
105 | - `--conversation-id`: ID of the conversation to continue.
106 | - `--message`: Follow-up message.
107 |
108 | - **Usage Example**:
109 | ```bash
110 | MCPContinueChatClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --conversation-id 12345 --message "Can you provide an update?"
111 | ```
112 |
113 | ### 2.2 MCPGetChatInfoClient
114 | - **Purpose**: Retrieves metadata and status information about an existing chat session.
115 |
116 | - **Main Features**:
117 | - Sends a `get_chat_info` command to the server.
118 | - Extracts and displays information about the chat session.
119 |
120 | - **Key Arguments**:
121 | - `--server-ip`: IP address of the MCP server.
122 | - `--server-port`: Port number of the MCP server.
123 | - `--token`: Authentication token.
124 | - `--chat-id`: ID of the chat session to retrieve information for.
125 |
126 | - **Usage Example**:
127 | ```bash
128 | MCPGetChatInfoClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --chat-id 6789
129 | ```
130 |
131 | ---
132 |
133 | ### 3.0 MCPCreateSourceClient
134 | - **Purpose**: Creates a new source on the MCP server and associates it with specified groups.
135 |
136 | - **Main Features**:
137 | - Sends a `create_source` command with details such as name, content, and associated groups.
138 | - Provides robust error handling for missing arguments and server communication issues.
139 |
140 | - **Key Arguments**:
141 | - `--server-ip`: IP address of the MCP server.
142 | - `--server-port`: Port number of the MCP server.
143 | - `--token`: Authentication token for the session.
144 | - `--name`: Name of the source to create.
145 | - `--content`: Content of the source in plain text or markdown.
146 | - `--groups`: (Optional) List of groups to associate with the source.
147 |
148 | - **Usage Example**:
149 | ```bash
150 | MCPCreateSourceClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --name "Sample Source" --content "This is a test content" --groups devops hr
151 | ```
152 |
153 | ---
154 |
155 | ### 3.1 MCPGetSourceClient
156 | - **Purpose**: Fetches detailed information about a specific source from the MCP server.
157 |
158 | - **Main Features**:
159 | - Sends a `get_source` command to the server with the source ID as a parameter.
160 | - Retrieves and displays the source's metadata and contents.
161 |
162 | - **Key Arguments**:
163 | - `--server-ip`: IP address of the MCP server.
164 | - `--server-port`: Port number of the MCP server.
165 | - `--token`: Authentication token for the server.
166 | - `--source-id`: Unique ID of the source to retrieve.
167 |
168 | - **Usage Example**:
169 | ```bash
170 | MCPGetSourceClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --source-id 12345
171 | ```
172 |
173 | ### 3.2 MCPListSourcesClient
174 | - **Purpose**: Lists all sources belonging to a specified group on the MCP server.
175 |
176 | - **Main Features**:
177 | - Sends a `list_sources` command with the group name as a parameter.
178 | - Displays a list of sources available in the specified group.
179 |
180 | - **Key Arguments**:
181 | - `--server-ip`: IP address of the MCP server.
182 | - `--server-port`: Port number of the MCP server.
183 | - `--token`: Authentication token for the server.
184 | - `--group-name`: Name of the group for which to list sources.
185 |
186 | - **Usage Example**:
187 | ```bash
188 | MCPListSourcesClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name devops
189 | ```
190 |
191 | ### 3.3 MCPEditSourceClient
192 | - **Purpose**: Edits the details of an existing source on the MCP server.
193 |
194 | - **Main Features**:
195 | - Sends an `edit_source` command with optional updates for the source title, content, and group associations.
196 | - Supports adding or updating multiple groups for the source.
197 |
198 | - **Key Arguments**:
199 | - `--server-ip`: IP address of the MCP server.
200 | - `--server-port`: Port number of the MCP server.
201 | - `--token`: Authentication token for the server.
202 | - `--source-id`: ID of the source to edit.
203 | - `--title`: (Optional) New title for the source.
204 | - `--content`: (Optional) New content for the source.
205 | - `--groups`: (Optional) List of groups to associate with the source.
206 |
207 | - **Usage Example**:
208 | ```bash
209 | MCPEditSourceClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --source-id 12345 --title "Updated Title" --content "Updated content for the source." --groups devops finance
210 | ```
211 |
212 | ### 3.4 MCPDeleteSourceClient
213 | - **Purpose**: Deletes a specific source from the MCP server.
214 |
215 | - **Main Features**:
216 | - Sends a `delete_source` command to remove the source identified by its ID.
217 |
218 | - **Key Arguments**:
219 | - `--server-ip`: IP address of the MCP server.
220 | - `--server-port`: Port number of the MCP server.
221 | - `--token`: Authentication token for the server.
222 | - `--source-id`: ID of the source to delete.
223 |
224 | - **Usage Example**:
225 | ```bash
226 | MCPDeleteSourceClient.exe --server-ip 127.0.0.1 --server-port 1234 -token MyToken --source-id 12345
227 | ```
228 |
229 | ---
230 |
231 | ### 4.0 MCPListGroupsClient
232 | - **Purpose**:
233 | Lists all the groups available on the MCP server.
234 |
235 | - **Main Features**:
236 | - Sends a `list_groups` command to retrieve the available groups.
237 | - Outputs the groups in JSON format.
238 |
239 | - **Key Arguments**:
240 | - `--server-ip`: IP address of the MCP server.
241 | - `--server-port`: Port number of the MCP server.
242 | - `--token`: Authentication token for the session.
243 |
244 | - **Usage Example**:
245 | ```bash
246 | MCPListGroupsClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken
247 | ```
248 |
249 | ### 4.1 MCPStoreGroupClient
250 | - **Purpose**:
251 | - Creates or updates a group on the MCP server.
252 |
253 | - **Main Features**:
254 | - Sends a `store_group` command with the group's name and description.
255 | - Allows creation of new groups or modification of existing ones.
256 |
257 | - **Key Arguments**:
258 | - `--server-ip`: IP address of the MCP server.
259 | - `--server-port`: Port number of the MCP server.
260 | - `--token`: Authentication token for the session.
261 | - `--group-name`: Name of the group to create or update.
262 | - `--description`: (Optional) Description of the group.
263 |
264 | - **Usage Example**:
265 | ```bash
266 | MCPStoreGroupClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name "Team DevOps" --description "Group for development and operations"
267 | ```
268 |
269 | ### 4.2 MCPDeleteGroupClient
270 | - **Purpose**:
271 | - Deletes a specified group from the MCP server.
272 |
273 | - **Main Features**:
274 | - Sends a `delete_group` command with the group name.
275 | - Ensures the group is removed from the server.
276 |
277 | - **Key Arguments**:
278 | - `--server-ip`: IP address of the MCP server.
279 | - `--server-port`: Port number of the MCP server.
280 | - `--token`: Authentication token for the session.
281 | - `--group-name`: Name of the group to delete.
282 |
283 | - **Usage Example**:
284 | ```bash
285 | MCPDeleteGroupClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name "Team DevOps"
286 | ```
287 |
288 | ---
289 |
290 | ### 5.0 MCPStoreUserClient
291 | - **Purpose:** Creates or updates user details on the MCP server.
292 |
293 | - **Main Features:**
294 | - Sends a `store_user` command with comprehensive user details.
295 | - Allows specification of default values for language and timezone if not provided.
296 |
297 | - **Key Arguments:**
298 | - `--server-ip`: IP address of the MCP server.
299 | - `--server-port`: Port number of the MCP server.
300 | - `--token`: Authentication token.
301 | - `--name`: Name of the user.
302 | - `--email`: Email address of the user.
303 | - `--password`: Password for the user account.
304 | - `--language` (Optional): User's preferred language (default: "en").
305 | - `--timezone` (Optional): User's timezone (default: "Europe/Berlin").
306 | - `--roles` (Optional): Roles assigned to the user.
307 | - `--groups` (Optional): Groups the user belongs to.
308 | - `--usePublic` (Optional): Flag to set the user as public.
309 | - `--activateFtp` (Optional): Flag to activate FTP access.
310 | - `--ftpPassword` (Optional): Password for FTP access.
311 |
312 | **Usage Example:**
313 | ```bash
314 | MCPStoreUserClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --name John --email [email protected] --password secret --language en --roles admin manager --groups devops finance --usePublic --activateFtp --ftpPassword ftpPass123
315 | ```
316 |
317 | ### 5.1 MCPEditUserClient
318 | - **Purpose:** Modifies the details of an existing user on the MCP server.
319 |
320 | - **Main Features:**
321 | - Sends an `edit_user` command with the specified user details.
322 | - Supports conditional sending of fields to avoid unnecessary data transmission.
323 |
324 | - **Key Arguments:**
325 | - `--server-ip`: IP address of the MCP server.
326 | - `--server-port`: Port number of the MCP server.
327 | - `--token`: Authentication token.
328 | - `--user-id`: ID of the user to modify.
329 | - `--name` (Optional): New name of the user.
330 | - `--email` (Optional): New email for the user.
331 | - `--password` (Optional): New password for the user.
332 | - `--language` (Optional): New language for the user.
333 | - `--timezone` (Optional): New timezone for the user.
334 | - `--roles` (Optional): New roles for the user.
335 | - `--groups` (Optional): New groups for the user.
336 | - `--usePublic` (Optional): Flag to set the user as public.
337 | - `--activateFtp` (Optional): Flag to activate FTP for the user.
338 | - `--ftpPassword` (Optional): New password for FTP access.
339 |
340 | - **Usage Example:**
341 | ```bash
342 | MCPEditUserClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --user-id 12345 --name Jane --roles manager devops --groups hr devops
343 | ```
344 |
345 | ### 5.2 MCPDeleteUserClient
346 | - **Purpose:** Deletes a user from the MCP server.
347 |
348 | - **Main Features:**
349 | - Sends a `delete_user` command using the user's email as an identifier.
350 |
351 | - **Key Arguments:**
352 | - `--server-ip`: IP address of the MCP server.
353 | - `--server-port`: Port number of the MCP server.
354 | - `--email`: Email address of the user to delete.
355 | - `--token`: Authentication token.
356 |
357 | - **Usage Example:**
358 | ```bash
359 | MCPDeleteUserClient.exe --server-ip 127.0.0.1 --server-port 1234 --token MyToken --email [email protected]
360 | ```
361 |
362 | ---
363 |
364 | ## General Notes
365 | **JSON Communication:**
366 | - Each file constructs and sends JSON payloads specific to its functionality.
367 | - Responses from the server are parsed and displayed in JSON format.
368 |
369 | **Socket Communication:**
370 | - The files use Go's Socket class for establishing TCP connections with the MCP server.
371 |
372 | **Error Handling:**
373 | - The scripts handle missing or invalid arguments gracefully, printing clear usage instructions where necessary.
374 |
375 | **Examples:**
376 | - Replace placeholders (e.g., `<SERVER_IP>`, `<TOKEN>`) with actual values relevant to your environment.
377 |
378 | ## Prerequisites and Dependencies:
379 | 1. **Go Compiler**: Those agents have been build using Go.
380 |
381 | ## Build
382 | Each Go console application is designed to perform a specific operation. Below are the details for compiling an example application, in this case MCPKeygenClient:
383 | ```bash
384 | go build .\MCPKeygenClient.go
385 | ```
386 |
387 | ## Error Handling
388 | Both clients include error handling for:
389 | - Missing or invalid parameters.
390 | - Server connection issues.
391 | - Unexpected server responses.
392 |
393 | ## Future Enhancements
394 | - Add support for SSL/TLS encryption for secure communication.
395 | - Implement a configuration file to simplify the command-line parameters.
396 | - Enhance error reporting with detailed server-side error codes.
397 |
398 | ## License
399 | This project is licensed under the MIT License - see the LICENSE file for details.
400 | This repository and/or code is provided "as is" without warranty of any kind, and use is at your own risk.
401 |
402 |
403 |
```
--------------------------------------------------------------------------------
/clients/C# .Net/README.md:
--------------------------------------------------------------------------------
```markdown
1 | # MCP Client Examples (C# .Net)
2 | This repository contains examples for interacting with the MCP server using **C# .Net**. Each console application demonstrates a specific operation and its corresponding server interaction.
3 |
4 | ### 1. Authentication
5 | [1.1 Login User](#10-mcploginclient)
6 | [1.2 Logout User](#12-mcplogoutclient)
7 |
8 | ### 2. Chat Operations
9 | [2.1 Start a New Chat](#20-mcpchatclient)
10 | [2.2 Continue a Chat Session](#21-mcpcontinuechatclient)
11 | [2.3 Retrieve Chat Info](#22-mcpgetchatinfoClient)
12 |
13 | ### 3. Source Management
14 | [3.1 Create a New Source](#30-mcpcreatesourceclient)
15 | [3.2 Retrieve Source Details](#31-mcpgetsourceclient)
16 | [3.3 List All Sources in a Group](#32-mcplistsourcesclient)
17 | [3.4 Edit an Existing Source](#33-mcpeditsourceclient)
18 | [3.5 Delete a Source](#34-mcpdeletesourceclient)
19 |
20 | ### 4. Group Management
21 | [4.1 List All Groups](#40-mcplistgroupsclient)
22 | [4.2 Create/Update a Group](#41-mcpstoregroupclient)
23 | [4.3 Delete a Group](#42-mcpdeletegroupclient)
24 |
25 | ### 5. User Management
26 | [5.1 Create/Update a User](#50-mcpstoreuserclient)
27 | [5.2 Edit User Details](#51-mcpedituserclient)
28 | [5.3 Delete a User](#52-mcpdeleteuserclient)
29 |
30 | ---
31 |
32 | ### 1.0 MCPLoginClient
33 | - **Purpose**: Handles user authentication by sending login requests to the MCP server.
34 |
35 | - **Main Features**:
36 | - Sends a `login` command to the server with user credentials.
37 | - Handles JSON-based requests and parses the server's response.
38 |
39 | - **Key Arguments**:
40 | - `--server-ip`: IP address of the MCP server.
41 | - `--server-port`: Port number of the MCP server.
42 | - `--email`: User email for authentication.
43 | - `--password`: User password for authentication.
44 |
45 | - **Usage Example**:
46 | ```bash
47 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --email [email protected] --password secret
48 | ```
49 |
50 | ### 1.2 MCPLogoutClient
51 | - **Purpose**: Logs out an authenticated user by invalidating their session token.
52 |
53 | - **Main Features**:
54 | - Sends a `logout` command to the server.
55 | - Invalidates the token provided in the request.
56 |
57 | - **Key Arguments**:
58 | - `--server-ip`: IP address of the MCP server.
59 | - `--server-port`: Port number of the MCP server.
60 | - `--token`: Authentication token to be invalidated.
61 |
62 | - **Usage Example**:
63 | ```bash
64 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken
65 | ```
66 |
67 | ---
68 |
69 | ### 2.0 MCPChatClient
70 | - **Purpose**: Initiates a new chat session with the MCP server.
71 |
72 | - **Main Features**:
73 | - Sends a `chat` command to the server with a question.
74 | - Supports optional parameters for public chats, groups, and language.
75 |
76 | - **Key Arguments**:
77 | - `--server-ip`: IP address of the MCP server.
78 | - `--server-port`: Port number of the MCP server.
79 | - `--token`: Authentication token.
80 | - `--question`: Initial question for the chat session.
81 | - `--use-public`: Optional flag for public chat.
82 | - `--groups`: Optional group list.
83 | - `--language`: Optional language parameter.
84 |
85 | - **Usage Example**:
86 | ```bash
87 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --question "Hello World" --use-public --groups "devops,hr" --language en
88 | ```
89 |
90 | ### 2.1 MCPContinueChatClient
91 | - **Purpose**: Continues an existing chat session by sending follow-up messages.
92 |
93 | - **Main Features**:
94 | - Sends a `continue_chat` command to the server.
95 | - Provides the conversation ID and follow-up message.
96 |
97 | - **Key Arguments**:
98 | - `--server-ip`: IP address of the MCP server.
99 | - `--server-port`: Port number of the MCP server.
100 | - `--token`: Authentication token.
101 | - `--conversation-id`: ID of the conversation to continue.
102 | - `--message`: Follow-up message.
103 |
104 | - **Usage Example**:
105 | ```bash
106 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --conversation-id 12345 --message "Can you provide an update?"
107 | ```
108 |
109 | ### 2.2 MCPGetChatInfo
110 | - **Purpose**: Retrieves metadata and status information about an existing chat session.
111 |
112 | - **Main Features**:
113 | - Sends a `get_chat_info` command to the server.
114 | - Extracts and displays information about the chat session.
115 |
116 | - **Key Arguments**:
117 | - `--server-ip`: IP address of the MCP server.
118 | - `--server-port`: Port number of the MCP server.
119 | - `--token`: Authentication token.
120 | - `--chat-id`: ID of the chat session to retrieve information for.
121 |
122 | - **Usage Example**:
123 | ```bash
124 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --chat-id 6789
125 | ```
126 |
127 | ---
128 |
129 | ### 3.0 MCPCreateSourceClient
130 | - **Purpose**: Creates a new source on the MCP server and associates it with specified groups.
131 |
132 | - **Main Features**:
133 | - Sends a `create_source` command with details such as name, content, and associated groups.
134 | - Provides robust error handling for missing arguments and server communication issues.
135 |
136 | - **Key Arguments**:
137 | - `--server-ip`: IP address of the MCP server.
138 | - `--server-port`: Port number of the MCP server.
139 | - `--token`: Authentication token for the session.
140 | - `--name`: Name of the source to create.
141 | - `--content`: Content of the source in plain text or markdown.
142 | - `--groups`: (Optional) List of groups to associate with the source.
143 |
144 | - **Usage Example**:
145 | ```bash
146 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --name "Sample Source" --content "This is a test content" --groups devops hr
147 | ```
148 |
149 | ---
150 |
151 | ### 3.1 MCPGetSourceClient
152 | - **Purpose**: Fetches detailed information about a specific source from the MCP server.
153 |
154 | - **Main Features**:
155 | - Sends a `get_source` command to the server with the source ID as a parameter.
156 | - Retrieves and displays the source's metadata and contents.
157 |
158 | - **Key Arguments**:
159 | - `--server-ip`: IP address of the MCP server.
160 | - `--server-port`: Port number of the MCP server.
161 | - `--token`: Authentication token for the server.
162 | - `--source-id`: Unique ID of the source to retrieve.
163 |
164 | - **Usage Example**:
165 | ```bash
166 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --source-id 12345
167 | ```
168 |
169 | ### 3.2 MCPListSourcesClient
170 | - **Purpose**: Lists all sources belonging to a specified group on the MCP server.
171 |
172 | - **Main Features**:
173 | - Sends a `list_sources` command with the group name as a parameter.
174 | - Displays a list of sources available in the specified group.
175 |
176 | - **Key Arguments**:
177 | - `--server-ip`: IP address of the MCP server.
178 | - `--server-port`: Port number of the MCP server.
179 | - `--token`: Authentication token for the server.
180 | - `--group-name`: Name of the group for which to list sources.
181 |
182 | - **Usage Example**:
183 | ```bash
184 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name devops
185 | ```
186 |
187 | ### 3.3 MCPEditSourceClient
188 | - **Purpose**: Edits the details of an existing source on the MCP server.
189 |
190 | - **Main Features**:
191 | - Sends an `edit_source` command with optional updates for the source title, content, and group associations.
192 | - Supports adding or updating multiple groups for the source.
193 |
194 | - **Key Arguments**:
195 | - `--server-ip`: IP address of the MCP server.
196 | - `--server-port`: Port number of the MCP server.
197 | - `--token`: Authentication token for the server.
198 | - `--source-id`: ID of the source to edit.
199 | - `--title`: (Optional) New title for the source.
200 | - `--content`: (Optional) New content for the source.
201 | - `--groups`: (Optional) List of groups to associate with the source.
202 |
203 | - **Usage Example**:
204 | ```bash
205 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --source-id 12345 --title "Updated Title" --content "Updated content for the source." --groups devops finance
206 | ```
207 |
208 | ### 3.4 MCPDeleteSourceClient
209 | - **Purpose**: Deletes a specific source from the MCP server.
210 |
211 | - **Main Features**:
212 | - Sends a `delete_source` command to remove the source identified by its ID.
213 |
214 | - **Key Arguments**:
215 | - `--server-ip`: IP address of the MCP server.
216 | - `--server-port`: Port number of the MCP server.
217 | - `--token`: Authentication token for the server.
218 | - `--source-id`: ID of the source to delete.
219 |
220 | - **Usage Example**:
221 | ```bash
222 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 -token MyToken --source-id 12345
223 | ```
224 |
225 | ---
226 |
227 | ### 4.0 MCPListGroupsClient
228 | - **Purpose**:
229 | Lists all the groups available on the MCP server.
230 |
231 | - **Main Features**:
232 | - Sends a `list_groups` command to retrieve the available groups.
233 | - Outputs the groups in JSON format.
234 |
235 | - **Key Arguments**:
236 | - `--server-ip`: IP address of the MCP server.
237 | - `--server-port`: Port number of the MCP server.
238 | - `--token`: Authentication token for the session.
239 |
240 | - **Usage Example**:
241 | ```bash
242 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken
243 | ```
244 |
245 | ### 4.1 MCPStoreGroupClient
246 | - **Purpose**:
247 | - Creates or updates a group on the MCP server.
248 |
249 | - **Main Features**:
250 | - Sends a `store_group` command with the group's name and description.
251 | - Allows creation of new groups or modification of existing ones.
252 |
253 | - **Key Arguments**:
254 | - `--server-ip`: IP address of the MCP server.
255 | - `--server-port`: Port number of the MCP server.
256 | - `--token`: Authentication token for the session.
257 | - `--group-name`: Name of the group to create or update.
258 | - `--description`: (Optional) Description of the group.
259 |
260 | - **Usage Example**:
261 | ```bash
262 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name "Team DevOps" --description "Group for development and operations"
263 | ```
264 |
265 | ### 4.2 MCPDeleteGroupClient
266 | - **Purpose**:
267 | - Deletes a specified group from the MCP server.
268 |
269 | - **Main Features**:
270 | - Sends a `delete_group` command with the group name.
271 | - Ensures the group is removed from the server.
272 |
273 | - **Key Arguments**:
274 | - `--server-ip`: IP address of the MCP server.
275 | - `--server-port`: Port number of the MCP server.
276 | - `--token`: Authentication token for the session.
277 | - `--group-name`: Name of the group to delete.
278 |
279 | - **Usage Example**:
280 | ```bash
281 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --group-name "Team DevOps"
282 | ```
283 |
284 | ---
285 |
286 | ### 5.0 MCPStoreUserClient
287 | - **Purpose:** Creates or updates user details on the MCP server.
288 |
289 | - **Main Features:**
290 | - Sends a `store_user` command with comprehensive user details.
291 | - Allows specification of default values for language and timezone if not provided.
292 |
293 | - **Key Arguments:**
294 | - `--server-ip`: IP address of the MCP server.
295 | - `--server-port`: Port number of the MCP server.
296 | - `--token`: Authentication token.
297 | - `--name`: Name of the user.
298 | - `--email`: Email address of the user.
299 | - `--password`: Password for the user account.
300 | - `--language` (Optional): User's preferred language (default: "en").
301 | - `--timezone` (Optional): User's timezone (default: "Europe/Berlin").
302 | - `--roles` (Optional): Roles assigned to the user.
303 | - `--groups` (Optional): Groups the user belongs to.
304 | - `--usePublic` (Optional): Flag to set the user as public.
305 | - `--activateFtp` (Optional): Flag to activate FTP access.
306 | - `--ftpPassword` (Optional): Password for FTP access.
307 |
308 | **Usage Example:**
309 | ```bash
310 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --name John --email [email protected] --password secret --language en --roles admin manager --groups devops finance --usePublic --activateFtp --ftpPassword ftpPass123
311 | ```
312 |
313 | ### 5.1 MCPEditUserClient
314 | - **Purpose:** Modifies the details of an existing user on the MCP server.
315 |
316 | - **Main Features:**
317 | - Sends an `edit_user` command with the specified user details.
318 | - Supports conditional sending of fields to avoid unnecessary data transmission.
319 |
320 | - **Key Arguments:**
321 | - `--server-ip`: IP address of the MCP server.
322 | - `--server-port`: Port number of the MCP server.
323 | - `--token`: Authentication token.
324 | - `--user-id`: ID of the user to modify.
325 | - `--name` (Optional): New name of the user.
326 | - `--email` (Optional): New email for the user.
327 | - `--password` (Optional): New password for the user.
328 | - `--language` (Optional): New language for the user.
329 | - `--timezone` (Optional): New timezone for the user.
330 | - `--roles` (Optional): New roles for the user.
331 | - `--groups` (Optional): New groups for the user.
332 | - `--usePublic` (Optional): Flag to set the user as public.
333 | - `--activateFtp` (Optional): Flag to activate FTP for the user.
334 | - `--ftpPassword` (Optional): New password for FTP access.
335 |
336 | - **Usage Example:**
337 | ```bash
338 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --user-id 12345 --name Jane --roles manager devops --groups hr devops
339 | ```
340 |
341 | ### 5.2 MCPDeleteUserClient
342 | - **Purpose:** Deletes a user from the MCP server.
343 |
344 | - **Main Features:**
345 | - Sends a `delete_user` command using the user's email as an identifier.
346 |
347 | - **Key Arguments:**
348 | - `--server-ip`: IP address of the MCP server.
349 | - `--server-port`: Port number of the MCP server.
350 | - `--email`: Email address of the user to delete.
351 | - `--token`: Authentication token.
352 |
353 | - **Usage Example:**
354 | ```bash
355 | dotnet run -- --server-ip 127.0.0.1 --server-port 1234 --token MyToken --email [email protected]
356 | ```
357 |
358 | ---
359 |
360 | ## General Notes
361 | **JSON Communication:**
362 | - Each file constructs and sends JSON payloads specific to its functionality.
363 | - Responses from the server are parsed and displayed in JSON format.
364 |
365 | **Socket Communication:**
366 | - The files use C# .Net's Socket class for establishing TCP connections with the MCP server.
367 |
368 | **Error Handling:**
369 | - The scripts handle missing or invalid arguments gracefully, printing clear usage instructions where necessary.
370 |
371 | **Examples:**
372 | - Replace placeholders (e.g., `<SERVER_IP>`, `<TOKEN>`) with actual values relevant to your environment.
373 |
374 | ## Prerequisites and Dependencies:
375 | 1. **.NET SDK**: Ensure you have the .NET SDK installed. Download it from [dotnet.microsoft.com](https://dotnet.microsoft.com/).
376 | 2. **Newtonsoft.Json**: The examples use the `Newtonsoft.Json` library for JSON serialization/deserialization. Install it using:
377 | ```bash
378 | dotnet add package Newtonsoft.Json
379 | ```
380 |
381 | ## Build and Run
382 | Each .NET C# console application is designed to perform a specific operation. Below are the details for compiling and running each application:
383 | ```bash
384 | dotnet build
385 | dotnet run -- <APPLICATION with PARAMETERS>
386 | ```
387 |
388 | ## Error Handling
389 | Both clients include error handling for:
390 | - Missing or invalid parameters.
391 | - Server connection issues.
392 | - Unexpected server responses.
393 |
394 | ## Future Enhancements
395 | - Add support for SSL/TLS encryption for secure communication.
396 | - Implement a configuration file to simplify the command-line parameters.
397 | - Enhance error reporting with detailed server-side error codes.
398 |
399 | ## License
400 | This project is licensed under the MIT License - see the LICENSE file for details.
401 | This repository and/or code is provided "as is" without warranty of any kind, and use is at your own risk.
402 |
403 |
404 |
```