pero-mcp-server


Namepero-mcp-server JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryA comprehensive MCP (Model Context Protocol) server supporting App Store Connect and SSH operations
upload_time2025-09-03 07:00:02
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords mcp app-store-connect ssh automation api
VCS
bugtrack_url
requirements fastmcp requests PyJWT cryptography pydantic python-dateutil paramiko
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Pero MCP Server

一个基于模型上下文协议(MCP)的多功能服务器集合,支持App Store Connect和SSH管理功能。

## 功能特性

### App Store Connect服务器
- 团队成员管理(邀请、移除、列表查看)
- 应用信息管理
- TestFlight测试组管理
- Beta测试者管理
- 支持完整的App Store Connect API操作

### SSH服务器
- 远程命令执行
- 文件上传下载
- 目录管理
- 系统信息获取
- 进程管理
- 文件搜索和内容查看

## 安装依赖

```bash
pip install -r requirements.txt
```

## 配置方式

所有配置均通过环境变量设置,确保安全性和便于部署。

### App Store Connect 配置

设置以下环境变量:

```bash
# 必需的环境变量
export APPSTORE_KEY_ID="your_api_key_id"
export APPSTORE_ISSUER_ID="your_issuer_id"
export APPSTORE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
your_private_key_content_here
-----END PRIVATE KEY-----"

# 可选的环境变量
export APPSTORE_APP_ID="your_app_id"
```

### SSH 配置

设置以下环境变量:

```bash
# 必需的环境变量
export SSH_HOSTNAME="your_server_ip_or_hostname"
export SSH_USERNAME="your_username"

# 认证方式(选择其一)
# 方式1:使用密码
export SSH_PASSWORD="your_password"

# 方式2:使用私钥文件
export SSH_PRIVATE_KEY_PATH="/path/to/your/private/key"

# 方式3:使用私钥内容
export SSH_PRIVATE_KEY_CONTENT="-----BEGIN RSA PRIVATE KEY-----
your_private_key_content_here
-----END RSA PRIVATE KEY-----"

# 可选的环境变量
export SSH_PORT="22"          # 默认22
export SSH_TIMEOUT="30"       # 默认30秒
```

## 使用方法

### 启动服务器

```python
from servers.appstoreconnect.appstore_connect_mcp_server import AppStoreConnectMCPServer
from servers.ssh.ssh_mcp_server import SSHMCPServer

# 启动App Store Connect服务器
appstore_server = AppStoreConnectMCPServer()
appstore_server.run()

# 启动SSH服务器
ssh_server = SSHMCPServer()
ssh_server.run()
```

### 主程序示例

```python
# main.py
import os
from servers.appstoreconnect.appstore_connect_mcp_server import AppStoreConnectMCPServer
from servers.ssh.ssh_mcp_server import SSHMCPServer

def main():
    # 检查App Store Connect配置
    if all([
        os.getenv('APPSTORE_KEY_ID'),
        os.getenv('APPSTORE_ISSUER_ID'),
        os.getenv('APPSTORE_PRIVATE_KEY')
    ]):
        print("启动App Store Connect服务器...")
        appstore_server = AppStoreConnectMCPServer()
        # appstore_server.run()
    
    # 检查SSH配置
    if all([
        os.getenv('SSH_HOSTNAME'),
        os.getenv('SSH_USERNAME'),
        any([
            os.getenv('SSH_PASSWORD'),
            os.getenv('SSH_PRIVATE_KEY_PATH'),
            os.getenv('SSH_PRIVATE_KEY_CONTENT')
        ])
    ]):
        print("启动SSH服务器...")
        ssh_server = SSHMCPServer()
        # ssh_server.run()

if __name__ == "__main__":
    main()
```

## 可用工具

### App Store Connect工具

- `list_team_members()` - 获取团队成员列表
- `invite_team_member(email, first_name, last_name, roles, provisioning_allowed)` - 邀请团队成员
- `remove_team_member(user_id)` - 移除团队成员
- `list_apps()` - 获取应用列表
- `create_testflight_group(app_id, group_name, is_internal, public_link_enabled)` - 创建TestFlight测试组
- `list_testflight_groups(app_id)` - 获取TestFlight测试组列表
- `add_tester_to_group(group_id, tester_email, first_name, last_name)` - 添加测试者到组
- `remove_tester_from_group(group_id, tester_id)` - 从组中移除测试者

### SSH工具

- `connect_ssh()` - 建立SSH连接
- `disconnect_ssh()` - 断开SSH连接
- `execute_command(command)` - 执行远程命令
- `list_directory(path)` - 列出目录内容
- `upload_file(local_path, remote_path)` - 上传文件
- `download_file(remote_path, local_path)` - 下载文件
- `get_system_info()` - 获取系统信息
- `create_directory(path)` - 创建目录
- `remove_file_or_directory(path, recursive)` - 删除文件或目录
- `get_file_content(path, lines)` - 获取文件内容
- `search_files(pattern, path, case_sensitive)` - 搜索文件
- `get_process_list()` - 获取进程列表
- `kill_process(pid, force)` - 终止进程

## 可用资源

### App Store Connect资源

- `appstore://apps` - 应用列表资源
- `appstore://members` - 团队成员资源

### SSH资源

- `ssh://system-info` - 系统信息资源
- `ssh://directory` - 当前目录内容资源
- `ssh://connection-status` - 连接状态资源

## 项目结构

```
pero-mcp-server/
├── main.py                          # 主程序入口
├── README.md                        # 项目说明文档
├── requirements.txt                 # Python依赖包
└── servers/                         # 服务器模块
    ├── __init__.py
    ├── base_mcp_server.py          # 基础MCP服务器类
    ├── appstoreconnect/            # App Store Connect服务器
    │   ├── __init__.py
    │   ├── models.py               # 数据模型
    │   ├── appstore_client.py      # API客户端
    │   └── appstore_connect_mcp_server.py # MCP服务器实现
    └── ssh/                        # SSH服务器
        ├── __init__.py
        ├── models.py               # 数据模型
        ├── ssh_client.py           # SSH客户端
        └── ssh_mcp_server.py       # MCP服务器实现
```

## 环境变量配置文件示例

创建 `.env` 文件来管理环境变量:

```bash
# App Store Connect 配置
APPSTORE_KEY_ID=your_key_id
APPSTORE_ISSUER_ID=your_issuer_id
APPSTORE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
your_private_key_content
-----END PRIVATE KEY-----"
APPSTORE_APP_ID=your_app_id

# SSH 配置
SSH_HOSTNAME=192.168.1.100
SSH_USERNAME=ubuntu
SSH_PASSWORD=your_password
SSH_PORT=22
SSH_TIMEOUT=30
```

然后使用 `python-dotenv` 加载:

```python
from dotenv import load_dotenv
load_dotenv()
```

## 注意事项

1. **安全性**:
   - 私钥和密码等敏感信息务必通过环境变量设置
   - 不要在代码中硬编码任何凭据
   - 在生产环境中使用密钥管理服务

2. **App Store Connect API**:
   - 需要先在App Store Connect中创建API密钥
   - 确保API密钥有足够的权限执行所需操作

3. **SSH连接**:
   - 支持密码和私钥两种认证方式
   - 建议在生产环境中使用私钥认证
   - 确保目标服务器的SSH服务正常运行

## 许可证

- MIT

## 贡献

欢迎提交Issue和Pull Request来改进项目。

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pero-mcp-server",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "mcp, app-store-connect, ssh, automation, api",
    "author": null,
    "author_email": "peropero <tech@peropero.net>",
    "download_url": "https://files.pythonhosted.org/packages/2e/4c/c221703c7940eb07e54434227d6c242b6e22d4a536bcb87975b936ca7ac7/pero_mcp_server-0.1.0.tar.gz",
    "platform": null,
    "description": "# Pero MCP Server\n\n\u4e00\u4e2a\u57fa\u4e8e\u6a21\u578b\u4e0a\u4e0b\u6587\u534f\u8bae\uff08MCP\uff09\u7684\u591a\u529f\u80fd\u670d\u52a1\u5668\u96c6\u5408\uff0c\u652f\u6301App Store Connect\u548cSSH\u7ba1\u7406\u529f\u80fd\u3002\n\n## \u529f\u80fd\u7279\u6027\n\n### App Store Connect\u670d\u52a1\u5668\n- \u56e2\u961f\u6210\u5458\u7ba1\u7406\uff08\u9080\u8bf7\u3001\u79fb\u9664\u3001\u5217\u8868\u67e5\u770b\uff09\n- \u5e94\u7528\u4fe1\u606f\u7ba1\u7406\n- TestFlight\u6d4b\u8bd5\u7ec4\u7ba1\u7406\n- Beta\u6d4b\u8bd5\u8005\u7ba1\u7406\n- \u652f\u6301\u5b8c\u6574\u7684App Store Connect API\u64cd\u4f5c\n\n### SSH\u670d\u52a1\u5668\n- \u8fdc\u7a0b\u547d\u4ee4\u6267\u884c\n- \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d\n- \u76ee\u5f55\u7ba1\u7406\n- \u7cfb\u7edf\u4fe1\u606f\u83b7\u53d6\n- \u8fdb\u7a0b\u7ba1\u7406\n- \u6587\u4ef6\u641c\u7d22\u548c\u5185\u5bb9\u67e5\u770b\n\n## \u5b89\u88c5\u4f9d\u8d56\n\n```bash\npip install -r requirements.txt\n```\n\n## \u914d\u7f6e\u65b9\u5f0f\n\n\u6240\u6709\u914d\u7f6e\u5747\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\uff0c\u786e\u4fdd\u5b89\u5168\u6027\u548c\u4fbf\u4e8e\u90e8\u7f72\u3002\n\n### App Store Connect \u914d\u7f6e\n\n\u8bbe\u7f6e\u4ee5\u4e0b\u73af\u5883\u53d8\u91cf\uff1a\n\n```bash\n# \u5fc5\u9700\u7684\u73af\u5883\u53d8\u91cf\nexport APPSTORE_KEY_ID=\"your_api_key_id\"\nexport APPSTORE_ISSUER_ID=\"your_issuer_id\"\nexport APPSTORE_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\nyour_private_key_content_here\n-----END PRIVATE KEY-----\"\n\n# \u53ef\u9009\u7684\u73af\u5883\u53d8\u91cf\nexport APPSTORE_APP_ID=\"your_app_id\"\n```\n\n### SSH \u914d\u7f6e\n\n\u8bbe\u7f6e\u4ee5\u4e0b\u73af\u5883\u53d8\u91cf\uff1a\n\n```bash\n# \u5fc5\u9700\u7684\u73af\u5883\u53d8\u91cf\nexport SSH_HOSTNAME=\"your_server_ip_or_hostname\"\nexport SSH_USERNAME=\"your_username\"\n\n# \u8ba4\u8bc1\u65b9\u5f0f\uff08\u9009\u62e9\u5176\u4e00\uff09\n# \u65b9\u5f0f1\uff1a\u4f7f\u7528\u5bc6\u7801\nexport SSH_PASSWORD=\"your_password\"\n\n# \u65b9\u5f0f2\uff1a\u4f7f\u7528\u79c1\u94a5\u6587\u4ef6\nexport SSH_PRIVATE_KEY_PATH=\"/path/to/your/private/key\"\n\n# \u65b9\u5f0f3\uff1a\u4f7f\u7528\u79c1\u94a5\u5185\u5bb9\nexport SSH_PRIVATE_KEY_CONTENT=\"-----BEGIN RSA PRIVATE KEY-----\nyour_private_key_content_here\n-----END RSA PRIVATE KEY-----\"\n\n# \u53ef\u9009\u7684\u73af\u5883\u53d8\u91cf\nexport SSH_PORT=\"22\"          # \u9ed8\u8ba422\nexport SSH_TIMEOUT=\"30\"       # \u9ed8\u8ba430\u79d2\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u542f\u52a8\u670d\u52a1\u5668\n\n```python\nfrom servers.appstoreconnect.appstore_connect_mcp_server import AppStoreConnectMCPServer\nfrom servers.ssh.ssh_mcp_server import SSHMCPServer\n\n# \u542f\u52a8App Store Connect\u670d\u52a1\u5668\nappstore_server = AppStoreConnectMCPServer()\nappstore_server.run()\n\n# \u542f\u52a8SSH\u670d\u52a1\u5668\nssh_server = SSHMCPServer()\nssh_server.run()\n```\n\n### \u4e3b\u7a0b\u5e8f\u793a\u4f8b\n\n```python\n# main.py\nimport os\nfrom servers.appstoreconnect.appstore_connect_mcp_server import AppStoreConnectMCPServer\nfrom servers.ssh.ssh_mcp_server import SSHMCPServer\n\ndef main():\n    # \u68c0\u67e5App Store Connect\u914d\u7f6e\n    if all([\n        os.getenv('APPSTORE_KEY_ID'),\n        os.getenv('APPSTORE_ISSUER_ID'),\n        os.getenv('APPSTORE_PRIVATE_KEY')\n    ]):\n        print(\"\u542f\u52a8App Store Connect\u670d\u52a1\u5668...\")\n        appstore_server = AppStoreConnectMCPServer()\n        # appstore_server.run()\n    \n    # \u68c0\u67e5SSH\u914d\u7f6e\n    if all([\n        os.getenv('SSH_HOSTNAME'),\n        os.getenv('SSH_USERNAME'),\n        any([\n            os.getenv('SSH_PASSWORD'),\n            os.getenv('SSH_PRIVATE_KEY_PATH'),\n            os.getenv('SSH_PRIVATE_KEY_CONTENT')\n        ])\n    ]):\n        print(\"\u542f\u52a8SSH\u670d\u52a1\u5668...\")\n        ssh_server = SSHMCPServer()\n        # ssh_server.run()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## \u53ef\u7528\u5de5\u5177\n\n### App Store Connect\u5de5\u5177\n\n- `list_team_members()` - \u83b7\u53d6\u56e2\u961f\u6210\u5458\u5217\u8868\n- `invite_team_member(email, first_name, last_name, roles, provisioning_allowed)` - \u9080\u8bf7\u56e2\u961f\u6210\u5458\n- `remove_team_member(user_id)` - \u79fb\u9664\u56e2\u961f\u6210\u5458\n- `list_apps()` - \u83b7\u53d6\u5e94\u7528\u5217\u8868\n- `create_testflight_group(app_id, group_name, is_internal, public_link_enabled)` - \u521b\u5efaTestFlight\u6d4b\u8bd5\u7ec4\n- `list_testflight_groups(app_id)` - \u83b7\u53d6TestFlight\u6d4b\u8bd5\u7ec4\u5217\u8868\n- `add_tester_to_group(group_id, tester_email, first_name, last_name)` - \u6dfb\u52a0\u6d4b\u8bd5\u8005\u5230\u7ec4\n- `remove_tester_from_group(group_id, tester_id)` - \u4ece\u7ec4\u4e2d\u79fb\u9664\u6d4b\u8bd5\u8005\n\n### SSH\u5de5\u5177\n\n- `connect_ssh()` - \u5efa\u7acbSSH\u8fde\u63a5\n- `disconnect_ssh()` - \u65ad\u5f00SSH\u8fde\u63a5\n- `execute_command(command)` - \u6267\u884c\u8fdc\u7a0b\u547d\u4ee4\n- `list_directory(path)` - \u5217\u51fa\u76ee\u5f55\u5185\u5bb9\n- `upload_file(local_path, remote_path)` - \u4e0a\u4f20\u6587\u4ef6\n- `download_file(remote_path, local_path)` - \u4e0b\u8f7d\u6587\u4ef6\n- `get_system_info()` - \u83b7\u53d6\u7cfb\u7edf\u4fe1\u606f\n- `create_directory(path)` - \u521b\u5efa\u76ee\u5f55\n- `remove_file_or_directory(path, recursive)` - \u5220\u9664\u6587\u4ef6\u6216\u76ee\u5f55\n- `get_file_content(path, lines)` - \u83b7\u53d6\u6587\u4ef6\u5185\u5bb9\n- `search_files(pattern, path, case_sensitive)` - \u641c\u7d22\u6587\u4ef6\n- `get_process_list()` - \u83b7\u53d6\u8fdb\u7a0b\u5217\u8868\n- `kill_process(pid, force)` - \u7ec8\u6b62\u8fdb\u7a0b\n\n## \u53ef\u7528\u8d44\u6e90\n\n### App Store Connect\u8d44\u6e90\n\n- `appstore://apps` - \u5e94\u7528\u5217\u8868\u8d44\u6e90\n- `appstore://members` - \u56e2\u961f\u6210\u5458\u8d44\u6e90\n\n### SSH\u8d44\u6e90\n\n- `ssh://system-info` - \u7cfb\u7edf\u4fe1\u606f\u8d44\u6e90\n- `ssh://directory` - \u5f53\u524d\u76ee\u5f55\u5185\u5bb9\u8d44\u6e90\n- `ssh://connection-status` - \u8fde\u63a5\u72b6\u6001\u8d44\u6e90\n\n## \u9879\u76ee\u7ed3\u6784\n\n```\npero-mcp-server/\n\u251c\u2500\u2500 main.py                          # \u4e3b\u7a0b\u5e8f\u5165\u53e3\n\u251c\u2500\u2500 README.md                        # \u9879\u76ee\u8bf4\u660e\u6587\u6863\n\u251c\u2500\u2500 requirements.txt                 # Python\u4f9d\u8d56\u5305\n\u2514\u2500\u2500 servers/                         # \u670d\u52a1\u5668\u6a21\u5757\n    \u251c\u2500\u2500 __init__.py\n    \u251c\u2500\u2500 base_mcp_server.py          # \u57fa\u7840MCP\u670d\u52a1\u5668\u7c7b\n    \u251c\u2500\u2500 appstoreconnect/            # App Store Connect\u670d\u52a1\u5668\n    \u2502   \u251c\u2500\u2500 __init__.py\n    \u2502   \u251c\u2500\u2500 models.py               # \u6570\u636e\u6a21\u578b\n    \u2502   \u251c\u2500\u2500 appstore_client.py      # API\u5ba2\u6237\u7aef\n    \u2502   \u2514\u2500\u2500 appstore_connect_mcp_server.py # MCP\u670d\u52a1\u5668\u5b9e\u73b0\n    \u2514\u2500\u2500 ssh/                        # SSH\u670d\u52a1\u5668\n        \u251c\u2500\u2500 __init__.py\n        \u251c\u2500\u2500 models.py               # \u6570\u636e\u6a21\u578b\n        \u251c\u2500\u2500 ssh_client.py           # SSH\u5ba2\u6237\u7aef\n        \u2514\u2500\u2500 ssh_mcp_server.py       # MCP\u670d\u52a1\u5668\u5b9e\u73b0\n```\n\n## \u73af\u5883\u53d8\u91cf\u914d\u7f6e\u6587\u4ef6\u793a\u4f8b\n\n\u521b\u5efa `.env` \u6587\u4ef6\u6765\u7ba1\u7406\u73af\u5883\u53d8\u91cf\uff1a\n\n```bash\n# App Store Connect \u914d\u7f6e\nAPPSTORE_KEY_ID=your_key_id\nAPPSTORE_ISSUER_ID=your_issuer_id\nAPPSTORE_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\nyour_private_key_content\n-----END PRIVATE KEY-----\"\nAPPSTORE_APP_ID=your_app_id\n\n# SSH \u914d\u7f6e\nSSH_HOSTNAME=192.168.1.100\nSSH_USERNAME=ubuntu\nSSH_PASSWORD=your_password\nSSH_PORT=22\nSSH_TIMEOUT=30\n```\n\n\u7136\u540e\u4f7f\u7528 `python-dotenv` \u52a0\u8f7d\uff1a\n\n```python\nfrom dotenv import load_dotenv\nload_dotenv()\n```\n\n## \u6ce8\u610f\u4e8b\u9879\n\n1. **\u5b89\u5168\u6027**\uff1a\n   - \u79c1\u94a5\u548c\u5bc6\u7801\u7b49\u654f\u611f\u4fe1\u606f\u52a1\u5fc5\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\n   - \u4e0d\u8981\u5728\u4ee3\u7801\u4e2d\u786c\u7f16\u7801\u4efb\u4f55\u51ed\u636e\n   - \u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4f7f\u7528\u5bc6\u94a5\u7ba1\u7406\u670d\u52a1\n\n2. **App Store Connect API**\uff1a\n   - \u9700\u8981\u5148\u5728App Store Connect\u4e2d\u521b\u5efaAPI\u5bc6\u94a5\n   - \u786e\u4fddAPI\u5bc6\u94a5\u6709\u8db3\u591f\u7684\u6743\u9650\u6267\u884c\u6240\u9700\u64cd\u4f5c\n\n3. **SSH\u8fde\u63a5**\uff1a\n   - \u652f\u6301\u5bc6\u7801\u548c\u79c1\u94a5\u4e24\u79cd\u8ba4\u8bc1\u65b9\u5f0f\n   - \u5efa\u8bae\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4f7f\u7528\u79c1\u94a5\u8ba4\u8bc1\n   - \u786e\u4fdd\u76ee\u6807\u670d\u52a1\u5668\u7684SSH\u670d\u52a1\u6b63\u5e38\u8fd0\u884c\n\n## \u8bb8\u53ef\u8bc1\n\n- MIT\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4Issue\u548cPull Request\u6765\u6539\u8fdb\u9879\u76ee\u3002\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A comprehensive MCP (Model Context Protocol) server supporting App Store Connect and SSH operations",
    "version": "0.1.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/peroperogames/pero-mcp-server/issues",
        "Documentation": "https://github.com/peroperogames/pero-mcp-server#readme",
        "Homepage": "https://github.com/peroperogames/pero-mcp-server",
        "Repository": "https://github.com/peroperogames/pero-mcp-server"
    },
    "split_keywords": [
        "mcp",
        " app-store-connect",
        " ssh",
        " automation",
        " api"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "677c56ae0bf12085fb98ae3a81ba188d9a28a62da5164b51f08349ae53347004",
                "md5": "8328201523dcbaa16ea428e4666ae2b6",
                "sha256": "978641aa01afcc45aea23ed4ac5dd040aa27e82b66350a915bbb3f163ae56281"
            },
            "downloads": -1,
            "filename": "pero_mcp_server-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8328201523dcbaa16ea428e4666ae2b6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 17813,
            "upload_time": "2025-09-03T07:00:01",
            "upload_time_iso_8601": "2025-09-03T07:00:01.708921Z",
            "url": "https://files.pythonhosted.org/packages/67/7c/56ae0bf12085fb98ae3a81ba188d9a28a62da5164b51f08349ae53347004/pero_mcp_server-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2e4cc221703c7940eb07e54434227d6c242b6e22d4a536bcb87975b936ca7ac7",
                "md5": "285c75101e54d16979500d484c3c8dc5",
                "sha256": "decd690777cbc853b40195e9e3c05b9524c57dfddcdc88d4bba586945cf762b7"
            },
            "downloads": -1,
            "filename": "pero_mcp_server-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "285c75101e54d16979500d484c3c8dc5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 17444,
            "upload_time": "2025-09-03T07:00:02",
            "upload_time_iso_8601": "2025-09-03T07:00:02.882593Z",
            "url": "https://files.pythonhosted.org/packages/2e/4c/c221703c7940eb07e54434227d6c242b6e22d4a536bcb87975b936ca7ac7/pero_mcp_server-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-03 07:00:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "peroperogames",
    "github_project": "pero-mcp-server",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "fastmcp",
            "specs": [
                [
                    ">=",
                    "0.1.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "PyJWT",
            "specs": [
                [
                    ">=",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    ">=",
                    "41.0.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    ">=",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "paramiko",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        }
    ],
    "lcname": "pero-mcp-server"
}
        
Elapsed time: 1.35032s