About RobSpectre/mvf1
RobSpectre/mvf1 is an MCP server published by RobSpectre in the Developer Tools category: a Python package and command line interface to control video players for MultiViewer For F1, the best way to watch Formula 1.
The repository has 19 stars and 4 forks, with the last commit a month ago. Recent commit activity is the strongest signal that reported issues will get attention.
Install
git clone https://github.com/RobSpectre/mvf1This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Ask AI
Ask AI about RobSpectre/mvf1
Powered by Claude · Grounded in docs
Security checks
Static checks derived from the repository 6 days ago. Heuristics on the source, not an audit.
- ✓README presentThe repository ships documentation.
- ✓License declaredUsable under a stated license.
- ✓Tests presentA test suite exists in the repository.
- !Dependencies pinnedNo lockfile. Installs can pull different code over time.
- ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
Releases
README
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 likeStreamDeck - 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}}
Synchronize open players to live timing
.. code-block:: python
>>> from mvf1 import MultiViewerForF1
>>> remote = MultiViewerForF1()
>>> remote.player_sync_to_live_timing()
{'data': {'meeting_id': '1279', 'session_id': '11234', 'synced_players': [...]}}
The same operation is available to MCP clients as
player_sync_to_live_timing. It uses the current live-timing clock,
session start, and each feed's signed offset to seek matching open players to
the first open player's session.
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_ orFormula 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/
README fetched from the repository 6 days ago. The original is authoritative.