Archestra Apps HackathonJoin now
Back to Catalog

mvf1

RobSpectre/mvf1
๐Ÿ”— Latest commit:6e11cfd
๐Ÿ•’ Updated:Sep 9, 2025, 01:06 PM
Python
Sports

A Python package and command line interface to control video players for MultiViewer For F1, the best way to watch Formula 1.

MCP Trust Score
Based on our comprehensive evaluation criteria
๐Ÿค– Evaluated by gemini-2.5-flashFix
Trust Score55/100
GitHub Metrics
Repository statistics and activity
โญ GitHub Stars:12
๐Ÿ‘ฅ Contributors:2
๐Ÿ“‹ Total Issues:1
๐Ÿ“ฆ Has Releases:Yes
๐Ÿ”ง Has CI/CD Pipeline:No
Configuration
Configuration example extracted from README.md for Claude Desktop and other clients.
๐Ÿค– Evaluated by gemini-2.5-flashFix
{
  "mvf1-stdio": {
    "command": "mvf1-cli",
    "args": [
      "mcp"
    ],
    "env": {}
  }
}
MCP Protocol Support
Implemented MCP protocol features
๐Ÿค– Evaluated by gemini-2.5-flashFix
Tools:โœ“
Prompts:โœ—
Resources:โœ“
Sampling:โœ—
Roots:โœ—
Logging:โœ—
STDIO Transport:โœ“
HTTP Transport:โœ—
OAuth2 Auth:โœ—
Dependencies
3 dependencies
Libraries and frameworks used by this MCP server
๐Ÿค– Evaluated by gemini-2.5-flashFix
Add Quality Badge
Show your MCP trust score in your README
Trust Score Badge
[![Trust Score](https://archestra.ai/mcp-catalog/api/badge/quality/RobSpectre/mvf1)](https://archestra.ai/mcp-catalog/robspectre__mvf1)
README.md

mvf1


A Python package, command line interface and MCP server to control video players for
MultiViewer_, the best way to watch Formula 1.

.. image:: https://dl.circleci.com/status-badge/img/gh/RobSpectre/mvf1/tree/main.svg?style=svg
:target: https://dl.circleci.com/status-badge/redirect/gh/RobSpectre/mvf1/tree/main

.. image:: https://codecov.io/gh/RobSpectre/mvf1/branch/main/graph/badge.svg?token=L5N96KXN2V
:target: https://codecov.io/gh/RobSpectre/mvf1

.. image:: https://readthedocs.org/projects/mvf1/badge/?version=latest
:target: https://mvf1.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status

Table of Contents

.. contents::
:local:
:depth: 1
:backlinks: none

Features

  • Command line interface for controlling MultiViewer. Useful for
    integrations with control interfaces like StreamDeck
  • Pythonic interface for controlling MultiViewer_. No GraphQL needed!
  • MCP server for controlling MultiViewer_ - perfect for controlling the
    broadcast for with AI agents.
  • Type hints_
  • Full documentation_
  • Test coverage_
  • black_ Praise the Dark Lord

Installation

The latest version can be installed via pip_.

.. code-block:: bash

$ pip install mvf1

Quickstart

Command Line

.. code-block:: bash

$ mvf1-cli --help

Model Context Protocol (MCP) Server

.. code-block:: bash

$ mvf1-cli mcp 

To use in an AI agent, use your framework's affordance for a stdio MCP
server.

Here is an example with PydanticAI.

.. code-block:: python

from pydantic_ai import Agent
from pydantic_ai.mcp import MCPServerStdio

server = MCPServerStdio(  
    'mvf1-cli',
    args=[
        'mcp'
    ]
)
agent = Agent('openai:gpt-4o', mcp_servers=[server])

Library

Displaying all players

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> remote.players
[6: INTERNATIONAL, 7: PER]

Pause all players

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> for player in remote.players:
>>>     player.mute()
{'data': {'playerSetMuted': True}}
{'data': {'playerSetMuted': True}}

Retrieve specific player

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.state
{'ts': 1677168293.21, 'paused': False, 'muted': True, 'volume': 100, 'live': False, 'currentTime': 10.002025, 'interpolatedCurrentTime': 363.656025}

Switch stream of player to data channel

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.switch_stream('DATA')
{'data': {'playerCreate': '12'}}

Synchronize all players to specific player

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> player = remote.player(6)
>>> player.sync()
{'data': {'playerSync': True}}

Synchornize all players to player streaming broadcast commentary

.. code-block:: python

>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> remote.player_sync_to_commentary()
{'data': {'playerSync': True}}

Development

Hacking

To hack on the project, clone the GitHub repo_:

.. code-block:: bash

$ git clone https://github.com/RobSpectre/mvf1

Then install in a virtualenv_.

.. code-block:: bash

$ pip install -e ./

Test

The project uses tox_ for tests. Simply run from project root

.. code-block:: bash

$ tox

Meta

  • Written by Rob Spectre_.
  • Released under MIT License_.
  • Software is as is - no warranty expressed or implied, diggity.
  • This package is not developed or maintained by MultiViewer_ or
    Formula 1 TV_.
  • Shout out to the excellent MultiViewer_ team! This app absolutely
    changed how I enjoy Formula 1.
  • ๐ŸŽ๏ธ Go Weeyums! ๐ŸŽ๏ธ

.. _MultiViewer: https://multiviewer.app/
.. _pip: https://multiviewer.app/
.. _GitHub Repo: https://github.com/RobSpectre/mvf1
.. _virtualenv: https://multiviewer.app/
.. _Rob Spectre: https://brooklynhacker.com
.. _MIT License: http://opensource.org/licenses/MIT
.. _tox: https://tox.wiki/en/latest/
.. _black: https://black.readthedocs.io/en/stable/
.. _StreamDeck: https://www.elgato.com/en/welcome-to-stream-deck
.. _type hints: https://docs.python.org/3/library/typing.html
.. _Full documentation: https://mvf1.readthedocs.io/en/latest/
.. _Test coverage: https://app.codecov.io/gh/RobSpectre/mvf1
.. _Formula 1 TV: https://f1tv.formula1.com/