pythonanywhere/pythonanywhere-mcp-server

pythonanywhere/pythonanywhere-mcp-server

от pythonanywhere
MCP сервер связывает AI-агентов с вашим PythonAnywhere: управляйте файлами, перезагружайте веб-приложения и настраивайте задачи по расписанию. Полезен разработчикам для автоматизации хостинга. Подключается через API токен.

PythonAnywhere Model Context Protocol Server

A Model Context Protocol (MCP) server acts as a bridge between AI-powered tools and your PythonAnywhere account, enabling secure, programmatic management of files, websites, webapps, and scheduled tasks. By exposing a standardized interface, it allows language models and automation clients to perform operations—such as editing files, deploying web apps, or scheduling jobs -- on your behalf, all while maintaining fine-grained control and auditability.

Features

  • File management: Read, upload, delete files and list directory trees. (also enables debugging with direct access to log files, which are just files on PythonAnywhere)
  • ASGI Web app management: Create, delete, reload, and list. (as described in the PythonAnywhere ASGI documentation)
  • WSGI Web app management: Create, delete, reload, patch, list, and get info.
  • Scheduled task management: List, create, update, and delete. (Note that this enables LLMs to execute arbitrary commands if a task is scheduled too soon after creation and deleted after execution. For that we would suggest running it with mcp-server-time as models easily get confused about time.)

Часто задаваемые вопросы

Инструменты были проиндексированы:
create_scheduled_task

Создаёт новую запланированную задачу. Аргументы: params (dict): Словарь с обязательными спецификациями запланированной задачи. Должен включать: - command (str): Команда для запуска. - enabled (bool): Включена ли задача. - interval (str): 'daily' или 'hourly'. - hour (int, необязательный): Час (24-часовой формат, для ежедневных задач). - minute (int): Минута. Возвращает: dict: Словарь с параметрами созданной задачи.

Параметры
  • paramsobjectобязательный
create_webapp

Создаёт новое веб-приложение на основе uWSGI для указанного домена. Создаёт новое веб-приложение на PythonAnywhere с указанной конфигурацией. Веб-приложение будет создано с использованием указанной версии Python, виртуального окружения и пути к проекту. Если веб-приложение для этого домена уже существует, операция завершится ошибкой, если только параметр nuke не установлен в True. Файл конфигурации WSGI находится в /var/www. Файл имеет формат: domain.replace('.', '_') + '_wsgi.py' Он будет автоматически создан как побочный эффект работы этого инструмента. Примечание: Виртуальные окружения настраиваются в конфигурации веб-приложения PythonAnywhere, а не в самом файле WSGI. Аргументы: domain (str): Имя домена для нового веб-приложения (например, 'alice.pythonanywhere.com'). python_version (str): Используемая версия Python (например, '3.11', '3.10', '3.9'). virtualenv_path (str | None): Путь к используемому виртуальному окружению. (или None, чтобы не использовать виртуальное окружение, когда используется один из предустановленных Python с полным набором пакетов) project_path (str): Путь к каталогу проекта, содержащему код веб-приложения. Возвращает: str: Сообщение о статусе, указывающее результат создания. Исключения: RuntimeError: Если аутентификация не удалась, веб-приложение уже существует (и nuke=False), или возникают другие ошибки API. Если возникает ошибка 403, это может означать, что уже есть сайт, не основанный на uWSGI. Для проверки можно использовать инструмент list_websites.

Параметры
  • domainstringобязательный
  • project_pathstringобязательный
  • python_versionstringобязательный
  • virtualenv_pathstringобязательный
create_website

Создаёт новый сайт с указанным доменным именем и командой. Эта функция в основном используется для создания нового сайта на базе ASGI на PythonAnywhere, но её можно применять и для любого сайта, который общается через Unix-сокет. Переданная команда должна использовать переменную окружения DOMAIN_SOCKET, чтобы привязаться к сокету. Аргументы: domain_name (str): Доменное имя для нового сайта (например, yourusername.pythonanywhere.com или www.mydomain.com). command (str): Команда для запуска нового сайта. Примеры: - Для FastAPI (ASGI): /usr/local/bin/uvicorn myapp:app --app-dir '/home/yourusername/fastapi/' --uds ${DOMAIN_SOCKET} - Для асинхронного Django: /home/yourusername/.virtualenvs/my_venv/bin/uvicorn asyncdjango.asgi:application --app-dir /home/yourusername/asyncdjango --uds ${DOMAIN_SOCKET} - Для сайтов не на ASGI (например, Streamlit): /home/yourusername/.virtualenvs/my_venv/bin/streamlit run /home/yourusername/my_streamlit/streamlit_app.py --server.address "unix://${DOMAIN_SOCKET}" --server.enableCORS false --server.enableXsrfProtection false --server.enableWebsocketCompression false Возвращает: dict: Словарь с информацией о созданном сайте.

Параметры
  • commandstringобязательный
  • domain_namestringобязательный
delete_path

Окончательно удаляет файл или каталог (рекурсивно, если это каталог). Аргументы: path (str): Абсолютный путь к файлу или каталогу для удаления. Возвращает: str: Сообщение о статусе, указывающее результат удаления.

Параметры
  • pathstringобязательный
delete_scheduled_task

Удаляет запланированную задачу по её ID. Args: task_id (int): ID запланированной задачи для удаления. Returns: bool: True, если удаление прошло успешно.

Параметры
  • task_idintegerобязательный
delete_webapp

Удаляет веб-приложение на базе uWSGI для указанного домена. Навсегда удаляет конфигурацию веб-приложения из PythonAnywhere. Сами файлы в вашей файловой системе не удаляются, только конфигурация веб-приложения, которая их обслуживает. Это действие нельзя отменить. Аргументы: domain (str): Имя домена веб-приложения, которое нужно удалить (например, 'alice.pythonanywhere.com'). Возвращает: str: Сообщение о статусе, указывающее результат удаления. Исключения: RuntimeError: Если аутентификация не удалась, веб-приложение не существует или возникают другие ошибки API.

Параметры
  • domainstringобязательный
delete_website

Удаляет веб-сайт с указанным доменным именем. Аргументы: domain_name (str): Доменное имя удаляемого веб-сайта. Возвращает: dict: Пустой словарь при успешном выполнении.

Параметры
  • domain_namestringобязательный
get_scheduled_task

Получает спецификации запланированной задачи по её идентификатору. Аргументы: task_id (int): Идентификатор запланированной задачи. Возвращает: dict: Словарь со спецификациями задачи.

Параметры
  • task_idintegerобязательный
get_webapp_info

Получает подробную информацию о конкретном веб-приложении на базе uWSGI. Собирает полную информацию о конфигурации и статусе указанного веб-приложения: пути, версию Python, статус включения и другие детали конфигурации. Аргументы: domain (str): Доменное имя веб-приложения, для которого запрашивается информация (например, 'alice.pythonanywhere.com'). Возвращает: dict: Словарь с подробной информацией о веб-приложении, включая: - "id": int, # Уникальный идентификатор сайта или пользовательской сессии - "user": str, # Имя пользователя, связанного с развёртыванием - "domain_name": str, # Доменное имя развёрнутого сайта - "python_version": str, # Используемая версия Python, например "3.10" - "source_directory": str, # Абсолютный путь к исходному каталогу сайта - "working_directory": str, # Абсолютный путь к рабочему каталогу - "virtualenv_path": str, # Путь к виртуальному окружению Python (может быть пустым) - "expiry": str, # Дата истечения в формате ISO, например "2025-10-16" - "force_https": bool, # Принудительно ли включён HTTPS - "password_protection_enabled": bool, # Включена ли защита паролем - "password_protection_username": str, # Имя пользователя для доступа с защитой паролем - "password_protection_password": str # Пароль для доступа с защитой паролем Исключения: RuntimeError: Если не проходит аутентификация, веб-приложение не существует или возникают другие ошибки API.

Параметры
  • domainstringобязательный
list_scheduled_tasks

Перечисляет все запланированные задачи для текущего пользователя. Пустой список означает, что запланированных задач нет. Возвращает: list[dict]: Список словарей, каждый из которых представляет запланированную задачу.

Параметры

Без параметров.

list_webapps

Перечисляет все веб-приложения на основе uWSGI для текущего пользователя. Получает информацию обо всех веб-приложениях, настроенных в вашей учётной записи PythonAnywhere. Возвращаемый список содержит словари с подробной информацией о каждом веб-приложении, включая домен, версию Python, пути и статус. В PythonAnywhere также могут быть сайты не на основе uWSGI (обычно на основе ASGI), которые не входят в этот список. Для них используйте инструмент list_websites. Возвращает: list: Список словарей с информацией о веб-приложениях. Пустой список означает, что веб-приложения на основе WSGI не развёрнуты. Это всё же может означать, что есть приложения не на основе WSGI, которые можно перечислить с помощью инструмента list_websites. См. также: get_webapp_info: Получает подробную информацию о конкретном веб-приложении. Исключения: RuntimeError: Если аутентификация не удалась или возникли другие ошибки API.

Параметры

Без параметров.

list_websites

Возвращает словари информации для каждого ASGI-сайта, настроенного для текущего пользователя. Пустой список означает, что сайты не развёрнуты. Он не включает веб-приложения на базе WSGI; их можно получить только с помощью инструмента list_webapps. Возвращает: List[dict[str, Any]]: список словарей с информацией о сайтах. Пустой список, если для пользователя не настроено ни одного сайта, но при этом могут быть настроены веб-приложения на базе WSGI; их можно получить с помощью инструмента list_webapps.

Параметры

Без параметров.

patch_webapp

Обновляет настройки конфигурации веб-приложения на базе uWSGI. Позволяет изменять различные настройки веб-приложения: версию Python, путь к виртуальному окружению, каталог исходного кода и другие параметры конфигурации. Обновляются только те поля, которые переданы в словаре data. Чтобы изменения вступили в силу, необходимо перезагрузить веб-приложение. Если указать недопустимую версию Python, вы получите ошибку 400 с сообщением о том, что эта версия не входит в список допустимых вариантов. Если вы получите эту ошибку, придётся выбрать другую версию Python. Аргументы: domain (str): доменное имя веб-приложения, которое нужно обновить (например, 'alice.pythonanywhere.com'). data (dict): словарь с изменениями конфигурации. Поддерживаемые ключи: - 'python_version': версия Python (например, '3.11') - 'virtualenv_path': путь к виртуальному окружению - 'source_directory': путь к каталогу исходного кода - 'working_directory': рабочий каталог веб-приложения - 'force_https': принудительное использование HTTPS при доступе к веб-приложению - 'password_protection_enabled': включение базовой HTTP-защиты паролем для веб-приложения; настраивается через PythonAnywhere, а не в коде веб-приложения - 'password_protection_username': имя пользователя для HTTP-защиты паролем - 'password_protection_password': пароль для HTTP-защиты паролем Возвращает: dict: обновлённая информация о конфигурации веб-приложения. Пример: { "id": 2097234, "user": username, "domain_name": domain, "python_version": "3.10", "source_directory": f"/home/{username}/mysite", "working_directory": f"/home/{username}/", "virtualenv_path": "", "expiry": "2025-10-16", "force_https": False, "password_protection_enabled": False, "password_protection_username": "foo" …

Параметры
  • dataobjectобязательный
  • domainstringобязательный
read_file_or_directory

Возвращает содержимое файла или листинг каталога. Если указанный путь - файл, возвращает его содержимое в виде строки. Если путь - каталог, возвращает строку JSON с его листингом (рекурсивно, до 1000 записей). Аргументы: path (str): Абсолютный путь к файлу или каталогу. Возвращает: str: Содержимое файла или JSON-листинг каталога.

Параметры
  • pathstringобязательный
reload_webapp

Перезагружает веб-приложение на базе uWSGI для указанного домена. Этот инструмент перезагружает веб-приложения на базе uWSGI на PythonAnywhere. Для веб-приложений на базе ASGI используйте инструмент reload_website вместо этого. Любые изменения кода требуют перезагрузки, чтобы вступить в силу. Аргументы: domain (str): Доменное имя веб-приложения для перезагрузки (например, 'alice.pythonanywhere.com'). Возвращает: str: Сообщение о статусе с результатом перезагрузки.

Параметры
  • domainstringобязательный
reload_website

Перезагружает ASGI-сайт для указанного домена. Это для ASGI-приложений на PythonAnywhere. Для uWSGI-приложений используйте инструмент reload_webapp. Любые изменения в коде требуют перезагрузки, чтобы вступить в силу. Аргументы: domain (str): доменное имя сайта, который нужно перезагрузить (например, 'alice.pythonanywhere.com'). Возвращает: str: сообщение о статусе результата перезагрузки.

Параметры
  • domainstringобязательный
tree

Возвращает список абсолютных путей, содержащихся в указанной директории. Аргументы: path (str): Абсолютный путь к директории. Путь к домашней директории: /home/<username>/, где <username> - ваше имя пользователя. Возвращает: List[str]: Список абсолютных путей, содержащихся в директории.

Параметры
  • pathstringобязательный
update_scheduled_task

Обновляет существующую запланированную задачу. Аргументы: task_id (int): Идентификатор запланированной задачи для обновления. params (dict): Словарь характеристик для обновления. Должен содержать хотя бы одно из: - command, enabled, interval, hour, minute. Возвращает: dict: Словарь с обновлёнными характеристиками задачи.

Параметры
  • paramsobjectобязательный
  • task_idintegerобязательный
upload_directory

Загружает локальную директорию на PythonAnywhere, сохраняя структуру директорий. Рекурсивно обходит локальную директорию и загружает каждый файл. Пустые директории сохраняются. Аргументы: local_dir_path (str): Абсолютный путь к локальной директории для загрузки. remote_dir_path (str): Абсолютный путь на PythonAnywhere, куда будет загружена директория. Возвращает: str: Сообщение о статусе, указывающее результат загрузки.

Параметры
  • local_dir_pathstringобязательный
  • remote_dir_pathstringобязательный
upload_text_file

Создаёт или заменяет файл с заданным содержимым (в кодировке UTF-8). Аргументы: dest_path (str): Абсолютный путь, по которому будет создан или заменён файл. content (str): Текстовое содержимое для записи в файл. Возвращает: str: Сообщение о статусе, указывающее результат загрузки.

Параметры
  • contentstringобязательный
  • dest_pathstringобязательный
0.0.14основная
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1

Выберите клиент, чтобы установить pythonanywhere/pythonanywhere-mcp-server:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"pythonanywhere-pythonanywhere-mcp-server-rec216fqeo\",\"type\":\"stdio\",\"command\":\"uvx\",\"args\":[\"pythonanywhere-mcp-server\"],\"env\":{\"API_TOKEN\":\"yourpythonanywhereapitoken\",\"PYTHONANYWHERE_USERNAME\":\"yourpythonanywhereusername\"}}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add pythonanywhere-pythonanywhere-mcp-server-rec216fqeo --env API_TOKEN=yourpythonanywhereapitoken --env PYTHONANYWHERE_USERNAME=yourpythonanywhereusername -- uvx pythonanywhere-mcp-server

Либо через JSON-конфиг:

claude mcp add-json pythonanywhere-pythonanywhere-mcp-server-rec216fqeo "{\"type\":\"stdio\",\"command\":\"uvx\",\"args\":[\"pythonanywhere-mcp-server\"],\"env\":{\"API_TOKEN\":\"yourpythonanywhereapitoken\",\"PYTHONANYWHERE_USERNAME\":\"yourpythonanywhereusername\"}}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add pythonanywhere-pythonanywhere-mcp-server-rec216fqeo --env API_TOKEN=yourpythonanywhereapitoken --env PYTHONANYWHERE_USERNAME=yourpythonanywhereusername -- uvx pythonanywhere-mcp-server

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.pythonanywhere-pythonanywhere-mcp-server-rec216fqeo]
command = "uvx"
args = ["pythonanywhere-mcp-server"]

[mcp_servers.pythonanywhere-pythonanywhere-mcp-server-rec216fqeo.env]
API_TOKEN = "yourpythonanywhereapitoken"
PYTHONANYWHERE_USERNAME = "yourpythonanywhereusername"
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите pythonanywhere/pythonanywhere-mcp-server, а в поле команды запуска — строку ниже:
uvx pythonanywhere-mcp-server

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например pythonanywhere-pythonanywhere-mcp-server-rec216fqeo.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: pythonanywhere-pythonanywhere-mcp-server-rec216fqeo
    command: uvx
    args:
      - "pythonanywhere-mcp-server"
    env:
      API_TOKEN: yourpythonanywhereapitoken
      PYTHONANYWHERE_USERNAME: yourpythonanywhereusername
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "pythonanywhere-pythonanywhere-mcp-server-rec216fqeo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "pythonanywhere-mcp-server"
      ],
      "env": {
        "API_TOKEN": "yourpythonanywhereapitoken",
        "PYTHONANYWHERE_USERNAME": "yourpythonanywhereusername"
      }
    }
  }
}

Похожие MCP-сервера

Woobox/hatchable-mcp

Woobox/hatchable-mcp

от woobox

Создавайте и хостите полнофункциональные веб-приложения прямо из MCP-клиента. Каждый проект получает Postgres, auth, cron и живую ссылку за секунды - бесплатно, без кредитов. Включает 30+ инструмен...

JavaScript⭐ 1
Heroku MCP

Heroku MCP

от heroku

MCP сервер для взаимодействия языковых моделей с Heroku. Управляйте приложениями, dynos и аддонами, развертывайте проекты через природный язык. Упрощает администрирование и автоматизацию развертывания для разработчиков.

TypeScript⭐ 82
joshuarileydev/supabase-mcp-server

joshuarileydev/supabase-mcp-server

от joshuarileydev

MCP-сервер для управления Supabase через Management API: создание и удаление проектов, управление организациями, получение ключей. Полезен разработчикам и AI-агентам для автоматизации инфраструктуры.

JavaScript⭐ 52
DigitalOcean MCP

DigitalOcean MCP

от digitalocean-labs

MCP сервер для управления облачными ресурсами DigitalOcean через API: дроплеты, базы данных и Kubernetes. Инструмент для автоматизации инфраструктуры разработчиками и DevOps.

Go⭐ 138
InsForge/insforge-mcp

InsForge/insforge-mcp

от insforge

Insforge MCP сервер превращает кодовых агентов в full-stack сборщиков: с его помощью они мгновенно подключают к приложениям backend-функции от аутентификации и баз данных до serverless функций и LL...

TypeScript⭐ 37
Vultr MCP

Vultr MCP

официальный

от vultr

Сервер Vultr MCP позволяет AI-агентам управлять облачными ресурсами через естественный язык. Инструменты генерируются из OpenAPI, поддерживаются STDIO и HTTP, аутентификация по API ключу и OAuth. Подходит для DevOps.

Python⭐ 2
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин