├── .gitignore ├── repository.yaml ├── .gitmodules ├── .github ├── FUNDING.yml └── workflows │ └── build.yml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .DS_Store 3 | SETTINGS.md 4 | index.md 5 | mcp-proxy 6 | typescript-sdk -------------------------------------------------------------------------------- /repository.yaml: -------------------------------------------------------------------------------- 1 | name: ptbsare's Home Assistant add-ons repository 2 | url: 'https://github.com/ptbsare/home-assistant-addons' 3 | maintainer: ptbsare<496725701@qq.com> 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "sherpa-onnx-tts-stt"] 2 | path = sherpa-onnx-tts-stt 3 | url = https://ptbsare@github.com/ptbsare/sherpa-onnx-tts-stt.git 4 | [submodule "mcp-proxy-server"] 5 | path = mcp-proxy-server 6 | url = https://github.com/ptbsare/mcp-proxy-server.git 7 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | # github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | # patreon: # Replace with a single Patreon username 5 | # open_collective: # Replace with a single Open Collective username 6 | # ko_fi: # Replace with a single Ko-fi username 7 | # tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | # community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | # liberapay: # Replace with a single Liberapay username 10 | # issuehunt: # Replace with a single IssueHunt username 11 | # otechie: # Replace with a single Otechie username 12 | custom: ['https://ptbsare.org/about/'] # Link to your custom sponsorship page 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Home Assistant Add-on: ptbsare 2 | 3 | ptbsare's Add-ons for [Home Assistant](https://www.home-assistant.io). 4 | 5 | # Sherpa Onnx TTS/STT 6 | 7 | Sherpa-onnx TTS/STT with wyoming support, supports kokoro-TTS/matcha-TTS/paraformer-STT, requires 1.5GB RAM. 8 | 9 | 离线Sherpa-onnx TTS/STT的wyoming集成,支持kokoro-TTS/matcha-TTS/paraformer-STT,需要1.5G内存。 10 | 11 | Also supports Openai-format TTS/STT api IP:10500/v1/audio/speech IP:10500/v1/audio/transcriptions 12 | 13 | 同时支持Openai TTS/STT 格式两个接口 IP:10500/v1/audio/speech IP:10500/v1/audio/transcriptions 14 | 15 | See [DOCS.md](https://github.com/ptbsare/sherpa-onnx-tts-stt/blob/main/DOCS.md) for documentation. 16 | 17 | 文档见 [DOCS.md](https://github.com/ptbsare/sherpa-onnx-tts-stt/blob/main/DOCS.md) 18 | 19 | [![Show add-on](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=adfd7a46_sherpa_onnx_tts_stt&repository_url=https%3A%2F%2Fgithub.com%2Fptbsare%2Fhome-assistant-addons) 20 | 21 | ([Sherpa Onnx Github Page](https://github.com/k2-fsa/sherpa-onnx)) 22 | 23 | 24 | # MCP Proxy Server 25 | 26 | A central hub for Model Context Protocol (MCP) servers. Manages multiple backend MCP servers (Stdio/SSE), exposing their combined tools and resources via a unified SSE interface or as a Stdio server. 27 | 28 | 一个模型上下文协议 (MCP) 服务器的中心枢纽。管理多个后端 MCP 服务器 (Stdio/SSE),通过统一的 SSE 接口或作为 Stdio 服务器暴露其组合的工具和资源。 29 | 30 | **Key Features:** / **主要特性:** 31 | * **Web UI Management:** Easily manage connected MCP servers and tools via an intuitive web interface. / **网页界面管理:** 通过直观的网页界面轻松管理连接的 MCP 服务器和工具。 32 | * **Granular Tool Control:** Enable/disable individual tools and override their names/descriptions. / **精细工具控制:** 启用/禁用单个工具,并覆盖其名称/描述。 33 | * **Real-time Install Monitoring:** Track Stdio server installation progress directly in the Web UI. / **实时安装监控:** 直接在网页界面中跟踪 Stdio 服务器的安装进度。 34 | * **Optional Web Terminal:** Access a command-line terminal within the Admin UI for direct interaction. / **可选网页终端:** 在管理界面中访问命令行终端进行直接交互。 35 | 36 | See [DOCS.md](mcp-proxy-server/DOCS.md) for documentation. 37 | 38 | 文档见 [DOCS.md](mcp-proxy-server/DOCS.md) 39 | 40 | [![Show add-on](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=mcp_proxy_server&repository_url=https%3A%2F%2Fgithub.com%2Fptbsare%2Fhome-assistant-addons) 41 | 42 | ([MCP Proxy Server Code](mcp-proxy-server/)) / ([MCP Proxy Server 代码](mcp-proxy-server/)) -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Builder 2 | 3 | env: 4 | BUILD_ARGS: "--test" 5 | 6 | 7 | on: 8 | workflow_dispatch: 9 | push: 10 | branches: 11 | - main 12 | 13 | jobs: 14 | init: 15 | runs-on: ubuntu-latest 16 | name: Initialize builds 17 | outputs: 18 | changed_addons: ${{ steps.changed_addons.outputs.addons }} 19 | changed: ${{ steps.changed_addons.outputs.changed }} 20 | steps: 21 | - name: Check out the repository 22 | uses: actions/checkout@v4 23 | with: 24 | submodules: recursive 25 | 26 | - name: Get changed files 27 | id: changed_files 28 | uses: jitterbit/get-changed-files@v1 29 | 30 | - name: Find add-on directories 31 | id: addons 32 | uses: home-assistant/actions/helpers/find-addons@master 33 | 34 | - name: Get changed add-ons 35 | id: changed_addons 36 | run: | 37 | declare -a changed_addons 38 | for addon in ${{ steps.addons.outputs.addons }}; do 39 | for changed_file in ${{ steps.changed_files.outputs.all }}; do 40 | if [[ "${changed_file}" =~ ^${addon} ]]; then 41 | if [[ ! "${changed_addons[@]}" =~ "${addon}" ]]; then 42 | changed_addons+=("\"${addon}\","); 43 | fi 44 | break 45 | fi 46 | done 47 | done 48 | changed=$(echo ${changed_addons[@]} | rev | cut -c 2- | rev) 49 | if [[ -n ${changed} ]]; then 50 | echo "Changed add-ons: $changed"; 51 | echo "changed=true" >> $GITHUB_OUTPUT 52 | echo "addons=[$changed]" >> $GITHUB_OUTPUT 53 | else 54 | echo "No add-on changed"; 55 | fi 56 | build: 57 | needs: init 58 | runs-on: ubuntu-latest 59 | if: needs.init.outputs.changed == 'true' 60 | name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on 61 | strategy: 62 | matrix: 63 | addon: ${{ fromJson(needs.init.outputs.changed_addons) }} 64 | arch: ["amd64", "aarch64"] 65 | 66 | steps: 67 | - name: Check out repository 68 | uses: actions/checkout@v4 69 | with: 70 | submodules: recursive 71 | 72 | - name: Get information 73 | id: info 74 | uses: home-assistant/actions/helpers/info@master 75 | with: 76 | path: "./${{ matrix.addon }}" 77 | 78 | - name: 🚀 Run Home Assistant Add-on Information 79 | id: information 80 | uses: frenck/action-addon-information@v1 81 | with: 82 | path: "./${{ matrix.addon }}" 83 | 84 | - name: ℹ️ Compose build flags 85 | id: flags 86 | run: | 87 | echo "date=$(date +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT 88 | from=$(yq --no-colors eval ".build_from.${{ matrix.arch }}" "${{ steps.information.outputs.build }}") 89 | echo "from=${from}" >> $GITHUB_OUTPUT 90 | if [[ "${{ matrix.arch}}" = "amd64" ]]; then 91 | echo "platform=linux/amd64" >> $GITHUB_OUTPUT 92 | elif [[ "${{ matrix.arch }}" = "i386" ]]; then 93 | echo "platform=linux/386" >> $GITHUB_OUTPUT 94 | elif [[ "${{ matrix.arch }}" = "armhf" ]]; then 95 | echo "platform=linux/arm/v6" >> $GITHUB_OUTPUT 96 | elif [[ "${{ matrix.arch }}" = "armv7" ]]; then 97 | echo "platform=linux/arm/v7" >> $GITHUB_OUTPUT 98 | elif [[ "${{ matrix.arch }}" = "aarch64" ]]; then 99 | echo "platform=linux/arm64/v8" >> $GITHUB_OUTPUT 100 | else 101 | echo "::error ::Could not determine platform for arch ${{ matrix.arch }}" 102 | exit 1 103 | fi 104 | 105 | - name: Set up QEMU 106 | uses: docker/setup-qemu-action@v3 107 | - name: Set up Docker Buildx 108 | uses: docker/setup-buildx-action@v3 109 | 110 | - name: Check if add-on should be built 111 | id: check 112 | run: | 113 | if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then 114 | echo "build_arch=true" >> $GITHUB_OUTPUT 115 | echo "image=$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)" >> $GITHUB_OUTPUT 116 | if [[ -z "${{ github.head_ref }}" ]] && [[ "${{ github.event_name }}" == "push" ]]; then 117 | echo "BUILD_ARGS=" >> $GITHUB_ENV; 118 | fi 119 | else 120 | echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build"; 121 | echo "build_arch=false" >> $GITHUB_OUTPUT 122 | fi 123 | - name: Login to GitHub Container Registry 124 | if: env.BUILD_ARGS != '--test' 125 | uses: docker/login-action@v3 126 | with: 127 | registry: ghcr.io 128 | username: ${{ github.repository_owner }} 129 | password: ${{ secrets.GITHUB_TOKEN }} 130 | - name: Build ${{ matrix.addon }} add-on 131 | if: steps.check.outputs.build_arch == 'true' 132 | uses: docker/build-push-action@v6 133 | with: 134 | push: true 135 | context: ./${{ matrix.addon }} 136 | tags: | 137 | ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}/${{ matrix.arch }}-addon-${{ matrix.addon }}:${{ steps.information.outputs.version }} 138 | ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}/${{ matrix.arch }}-addon-${{ matrix.addon }}:latest 139 | platforms: ${{ steps.flags.outputs.platform }} 140 | build-args: | 141 | BUILD_ARCH=${{ matrix.arch }} 142 | BUILD_DATE=${{ steps.flags.outputs.date }} 143 | BUILD_FROM=${{ steps.flags.outputs.from }} 144 | BUILD_REF=${{ github.sha }} 145 | BUILD_REPOSITORY=${{ github.repository }} 146 | BUILD_VERSION=${{ needs.information.outputs.version }} 147 | labels: | 148 | org.opencontainers.image.source=${{ github.event.repository.html_url }} 149 | org.opencontainers.image.revision=${{ github.sha }} 150 | --------------------------------------------------------------------------------