quicktube-mcp 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- quicktube_mcp-1.0.0/LICENSE +21 -0
- quicktube_mcp-1.0.0/PKG-INFO +165 -0
- quicktube_mcp-1.0.0/README.md +132 -0
- quicktube_mcp-1.0.0/pyproject.toml +64 -0
- quicktube_mcp-1.0.0/quicktube_mcp/__init__.py +3 -0
- quicktube_mcp-1.0.0/quicktube_mcp/server.py +876 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/PKG-INFO +165 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/SOURCES.txt +12 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/dependency_links.txt +1 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/entry_points.txt +2 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/requires.txt +5 -0
- quicktube_mcp-1.0.0/quicktube_mcp.egg-info/top_level.txt +1 -0
- quicktube_mcp-1.0.0/setup.cfg +4 -0
- quicktube_mcp-1.0.0/tests/test_server.py +493 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AW3 Technology, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: quicktube-mcp
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: MCP server for QuickTube (quicktube.ai): YouTube transcripts, AI summaries, quizzes and fact-checks for AI agents
|
|
5
|
+
Author-email: "AW3 Technology, Inc." <will.schulz@aw3.tech>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://quicktube.ai
|
|
8
|
+
Project-URL: Documentation, https://quicktube.ai/api-docs
|
|
9
|
+
Project-URL: MCP setup, https://quicktube.ai/api-docs#mcp-server
|
|
10
|
+
Project-URL: API keys, https://quicktube.ai/settings?tab=api-keys
|
|
11
|
+
Keywords: youtube,transcript,mcp,model-context-protocol,ai,video,summary,claude
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Topic :: Multimedia :: Video
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: mcp<2,>=1.22
|
|
29
|
+
Requires-Dist: httpx<1,>=0.27
|
|
30
|
+
Provides-Extra: test
|
|
31
|
+
Requires-Dist: pytest>=7; extra == "test"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# QuickTube MCP Server
|
|
35
|
+
|
|
36
|
+
<!-- mcp-name: ai.quicktube/quicktube-mcp -->
|
|
37
|
+
|
|
38
|
+
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server for [QuickTube](https://quicktube.ai). It lets AI agents such as Claude Code, Claude Desktop and Cursor fetch YouTube transcripts, summarize videos, find the key moments, generate quizzes, fact-check claims and more.
|
|
39
|
+
|
|
40
|
+
- Website: https://quicktube.ai
|
|
41
|
+
- API and MCP docs: https://quicktube.ai/api-docs
|
|
42
|
+
- Get an API key: https://quicktube.ai/settings?tab=api-keys
|
|
43
|
+
|
|
44
|
+
## Tools
|
|
45
|
+
|
|
46
|
+
| Tool | Description | Credits |
|
|
47
|
+
|------|-------------|---------|
|
|
48
|
+
| `get_transcript` | Fetch a YouTube video transcript (paged for long videos) | 1 per call |
|
|
49
|
+
| `summarize_video` | Generate an AI summary | 5 |
|
|
50
|
+
| `get_best_sections` | Identify key moments and highlights | 5 |
|
|
51
|
+
| `detect_characters` | Detect speakers and people | 3 |
|
|
52
|
+
| `chat_with_video` | Ask questions about the video's content | 1/msg |
|
|
53
|
+
| `generate_quiz` | Create a comprehension quiz | 5 |
|
|
54
|
+
| `fact_check_video` | Fact-check claims (web-grounded) | 5 |
|
|
55
|
+
| `get_bias_score` | Analyze political/ideological bias | 5 |
|
|
56
|
+
| `neutralize_bias` | Rewrite biased language neutrally | 5 |
|
|
57
|
+
| `get_video_metadata` | Get video title, stats, duration | 0 |
|
|
58
|
+
| `search_videos` | Search YouTube | 0 |
|
|
59
|
+
| `get_video_comments` | Get video comments | 0 |
|
|
60
|
+
| `get_related_videos` | Find related videos | 0 |
|
|
61
|
+
| `list_sessions` | List saved analysis sessions | 0 |
|
|
62
|
+
| `get_session` | Get a saved session | 0 |
|
|
63
|
+
| `save_session` | Save an analysis for later | 0 |
|
|
64
|
+
| `delete_session` | Delete a saved session | 0 |
|
|
65
|
+
| `get_credit_balance` | Check your credit balance | 0 |
|
|
66
|
+
| `batch_process_videos` | Analyze up to 20 videos at once | per video: transcript 1, summary 5, sections 5 |
|
|
67
|
+
|
|
68
|
+
## Setup
|
|
69
|
+
|
|
70
|
+
### 1. Get an API key
|
|
71
|
+
|
|
72
|
+
Create an API key at [quicktube.ai/settings?tab=api-keys](https://quicktube.ai/settings?tab=api-keys). Each tool needs a scope on the key:
|
|
73
|
+
|
|
74
|
+
| Scope | Tools | In a new key by default |
|
|
75
|
+
|-------|-------|-------------------------|
|
|
76
|
+
| `transcript` | `get_transcript` | yes |
|
|
77
|
+
| `ai` | `summarize_video`, `get_best_sections`, `detect_characters`, `chat_with_video`, `fact_check_video`, `get_bias_score`, `neutralize_bias` | yes |
|
|
78
|
+
| `batch` | `batch_process_videos` | yes |
|
|
79
|
+
| `sessions:read` | `list_sessions`, `get_session` | no |
|
|
80
|
+
| `sessions:write` | `save_session`, `delete_session` | no |
|
|
81
|
+
| `billing:read` | `get_credit_balance` | no |
|
|
82
|
+
|
|
83
|
+
`generate_quiz` and the YouTube data tools (`get_video_metadata`, `search_videos`, `get_video_comments`, `get_related_videos`) need no particular scope. Keys created on the settings page get the default scopes only, so the session and balance tools return 403 with them.
|
|
84
|
+
|
|
85
|
+
### 2. Add the server to your MCP client
|
|
86
|
+
|
|
87
|
+
The quickest route is [`uvx`](https://docs.astral.sh/uv/), which downloads and runs the server without a separate install step.
|
|
88
|
+
|
|
89
|
+
**Claude Code**
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
claude mcp add quicktube --env QUICKTUBE_API_KEY=qt_your_api_key_here -- uvx quicktube-mcp
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Claude Desktop, Cursor and other clients** (`claude_desktop_config.json`, `.cursor/mcp.json`, `.mcp.json`, ...):
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"mcpServers": {
|
|
100
|
+
"quicktube": {
|
|
101
|
+
"command": "uvx",
|
|
102
|
+
"args": ["quicktube-mcp"],
|
|
103
|
+
"env": {
|
|
104
|
+
"QUICKTUBE_API_KEY": "qt_your_api_key_here"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**With pip instead of uvx**
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pip install quicktube-mcp
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then use `"command": "quicktube-mcp"` (no `args`) in the config above.
|
|
118
|
+
|
|
119
|
+
### Environment variables
|
|
120
|
+
|
|
121
|
+
| Variable | Required | Default |
|
|
122
|
+
|----------|----------|---------|
|
|
123
|
+
| `QUICKTUBE_API_KEY` | yes | none |
|
|
124
|
+
| `QUICKTUBE_BASE_URL` | no | `https://quicktube.ai` |
|
|
125
|
+
| `QUICKTUBE_TIMEOUT` | no | `120` (seconds; batch calls always get at least 600) |
|
|
126
|
+
|
|
127
|
+
The server starts without `QUICKTUBE_API_KEY` so clients can list its tools, but every tool call fails until the key is set. `QUICKTUBE_BASE_URL` may be given with or without a trailing `/api`.
|
|
128
|
+
|
|
129
|
+
### Long transcripts
|
|
130
|
+
|
|
131
|
+
`get_transcript` returns at most `max_chars` characters (80,000 by default, roughly 20k tokens) so a three-hour podcast doesn't flood the agent's context. When the result has `"truncated": true`, call it again with `offset` set to the returned `next_offset`. Each call costs a credit, so for a whole long video `summarize_video`, `get_best_sections` or `chat_with_video` are usually the better tools. `get_session`, `list_sessions` and `batch_process_videos` likewise leave out the timestamped transcript entries and cap the transcript text.
|
|
132
|
+
|
|
133
|
+
### Errors
|
|
134
|
+
|
|
135
|
+
API errors come back to the agent as tool errors with the status and the server's reason, for example `QuickTube API error 402 (Payment Required): Insufficient credits (needs 5 credits, balance 2). Buy credits at https://quicktube.ai/pricing`, or a 429 with the `Retry-After` delay.
|
|
136
|
+
|
|
137
|
+
## Running it directly
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
quicktube-mcp # MCP over stdio (what MCP clients expect)
|
|
141
|
+
quicktube-mcp --help
|
|
142
|
+
quicktube-mcp --version
|
|
143
|
+
quicktube-mcp --transport streamable-http # local HTTP transport
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Example prompts
|
|
147
|
+
|
|
148
|
+
- "Get me the transcript of this YouTube video and summarize it."
|
|
149
|
+
- "What are the key moments in this podcast episode?"
|
|
150
|
+
- "Fact-check the claims made in this news video."
|
|
151
|
+
- "Generate a quiz from this educational video."
|
|
152
|
+
- "Is this video politically biased? Analyze it."
|
|
153
|
+
- "Process these 5 videos and give me summaries of each."
|
|
154
|
+
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
pip install -e '.[test]'
|
|
159
|
+
pytest
|
|
160
|
+
quicktube-mcp --help
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# QuickTube MCP Server
|
|
2
|
+
|
|
3
|
+
<!-- mcp-name: ai.quicktube/quicktube-mcp -->
|
|
4
|
+
|
|
5
|
+
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server for [QuickTube](https://quicktube.ai). It lets AI agents such as Claude Code, Claude Desktop and Cursor fetch YouTube transcripts, summarize videos, find the key moments, generate quizzes, fact-check claims and more.
|
|
6
|
+
|
|
7
|
+
- Website: https://quicktube.ai
|
|
8
|
+
- API and MCP docs: https://quicktube.ai/api-docs
|
|
9
|
+
- Get an API key: https://quicktube.ai/settings?tab=api-keys
|
|
10
|
+
|
|
11
|
+
## Tools
|
|
12
|
+
|
|
13
|
+
| Tool | Description | Credits |
|
|
14
|
+
|------|-------------|---------|
|
|
15
|
+
| `get_transcript` | Fetch a YouTube video transcript (paged for long videos) | 1 per call |
|
|
16
|
+
| `summarize_video` | Generate an AI summary | 5 |
|
|
17
|
+
| `get_best_sections` | Identify key moments and highlights | 5 |
|
|
18
|
+
| `detect_characters` | Detect speakers and people | 3 |
|
|
19
|
+
| `chat_with_video` | Ask questions about the video's content | 1/msg |
|
|
20
|
+
| `generate_quiz` | Create a comprehension quiz | 5 |
|
|
21
|
+
| `fact_check_video` | Fact-check claims (web-grounded) | 5 |
|
|
22
|
+
| `get_bias_score` | Analyze political/ideological bias | 5 |
|
|
23
|
+
| `neutralize_bias` | Rewrite biased language neutrally | 5 |
|
|
24
|
+
| `get_video_metadata` | Get video title, stats, duration | 0 |
|
|
25
|
+
| `search_videos` | Search YouTube | 0 |
|
|
26
|
+
| `get_video_comments` | Get video comments | 0 |
|
|
27
|
+
| `get_related_videos` | Find related videos | 0 |
|
|
28
|
+
| `list_sessions` | List saved analysis sessions | 0 |
|
|
29
|
+
| `get_session` | Get a saved session | 0 |
|
|
30
|
+
| `save_session` | Save an analysis for later | 0 |
|
|
31
|
+
| `delete_session` | Delete a saved session | 0 |
|
|
32
|
+
| `get_credit_balance` | Check your credit balance | 0 |
|
|
33
|
+
| `batch_process_videos` | Analyze up to 20 videos at once | per video: transcript 1, summary 5, sections 5 |
|
|
34
|
+
|
|
35
|
+
## Setup
|
|
36
|
+
|
|
37
|
+
### 1. Get an API key
|
|
38
|
+
|
|
39
|
+
Create an API key at [quicktube.ai/settings?tab=api-keys](https://quicktube.ai/settings?tab=api-keys). Each tool needs a scope on the key:
|
|
40
|
+
|
|
41
|
+
| Scope | Tools | In a new key by default |
|
|
42
|
+
|-------|-------|-------------------------|
|
|
43
|
+
| `transcript` | `get_transcript` | yes |
|
|
44
|
+
| `ai` | `summarize_video`, `get_best_sections`, `detect_characters`, `chat_with_video`, `fact_check_video`, `get_bias_score`, `neutralize_bias` | yes |
|
|
45
|
+
| `batch` | `batch_process_videos` | yes |
|
|
46
|
+
| `sessions:read` | `list_sessions`, `get_session` | no |
|
|
47
|
+
| `sessions:write` | `save_session`, `delete_session` | no |
|
|
48
|
+
| `billing:read` | `get_credit_balance` | no |
|
|
49
|
+
|
|
50
|
+
`generate_quiz` and the YouTube data tools (`get_video_metadata`, `search_videos`, `get_video_comments`, `get_related_videos`) need no particular scope. Keys created on the settings page get the default scopes only, so the session and balance tools return 403 with them.
|
|
51
|
+
|
|
52
|
+
### 2. Add the server to your MCP client
|
|
53
|
+
|
|
54
|
+
The quickest route is [`uvx`](https://docs.astral.sh/uv/), which downloads and runs the server without a separate install step.
|
|
55
|
+
|
|
56
|
+
**Claude Code**
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
claude mcp add quicktube --env QUICKTUBE_API_KEY=qt_your_api_key_here -- uvx quicktube-mcp
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Claude Desktop, Cursor and other clients** (`claude_desktop_config.json`, `.cursor/mcp.json`, `.mcp.json`, ...):
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"quicktube": {
|
|
68
|
+
"command": "uvx",
|
|
69
|
+
"args": ["quicktube-mcp"],
|
|
70
|
+
"env": {
|
|
71
|
+
"QUICKTUBE_API_KEY": "qt_your_api_key_here"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**With pip instead of uvx**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install quicktube-mcp
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Then use `"command": "quicktube-mcp"` (no `args`) in the config above.
|
|
85
|
+
|
|
86
|
+
### Environment variables
|
|
87
|
+
|
|
88
|
+
| Variable | Required | Default |
|
|
89
|
+
|----------|----------|---------|
|
|
90
|
+
| `QUICKTUBE_API_KEY` | yes | none |
|
|
91
|
+
| `QUICKTUBE_BASE_URL` | no | `https://quicktube.ai` |
|
|
92
|
+
| `QUICKTUBE_TIMEOUT` | no | `120` (seconds; batch calls always get at least 600) |
|
|
93
|
+
|
|
94
|
+
The server starts without `QUICKTUBE_API_KEY` so clients can list its tools, but every tool call fails until the key is set. `QUICKTUBE_BASE_URL` may be given with or without a trailing `/api`.
|
|
95
|
+
|
|
96
|
+
### Long transcripts
|
|
97
|
+
|
|
98
|
+
`get_transcript` returns at most `max_chars` characters (80,000 by default, roughly 20k tokens) so a three-hour podcast doesn't flood the agent's context. When the result has `"truncated": true`, call it again with `offset` set to the returned `next_offset`. Each call costs a credit, so for a whole long video `summarize_video`, `get_best_sections` or `chat_with_video` are usually the better tools. `get_session`, `list_sessions` and `batch_process_videos` likewise leave out the timestamped transcript entries and cap the transcript text.
|
|
99
|
+
|
|
100
|
+
### Errors
|
|
101
|
+
|
|
102
|
+
API errors come back to the agent as tool errors with the status and the server's reason, for example `QuickTube API error 402 (Payment Required): Insufficient credits (needs 5 credits, balance 2). Buy credits at https://quicktube.ai/pricing`, or a 429 with the `Retry-After` delay.
|
|
103
|
+
|
|
104
|
+
## Running it directly
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
quicktube-mcp # MCP over stdio (what MCP clients expect)
|
|
108
|
+
quicktube-mcp --help
|
|
109
|
+
quicktube-mcp --version
|
|
110
|
+
quicktube-mcp --transport streamable-http # local HTTP transport
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Example prompts
|
|
114
|
+
|
|
115
|
+
- "Get me the transcript of this YouTube video and summarize it."
|
|
116
|
+
- "What are the key moments in this podcast episode?"
|
|
117
|
+
- "Fact-check the claims made in this news video."
|
|
118
|
+
- "Generate a quiz from this educational video."
|
|
119
|
+
- "Is this video politically biased? Analyze it."
|
|
120
|
+
- "Process these 5 videos and give me summaries of each."
|
|
121
|
+
|
|
122
|
+
## Development
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
pip install -e '.[test]'
|
|
126
|
+
pytest
|
|
127
|
+
quicktube-mcp --help
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## License
|
|
131
|
+
|
|
132
|
+
MIT
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
# setuptools 77+ understands the SPDX `license` string and `license-files`.
|
|
3
|
+
requires = ["setuptools>=77.0"]
|
|
4
|
+
build-backend = "setuptools.build_meta"
|
|
5
|
+
|
|
6
|
+
[project]
|
|
7
|
+
name = "quicktube-mcp"
|
|
8
|
+
dynamic = ["version"]
|
|
9
|
+
description = "MCP server for QuickTube (quicktube.ai): YouTube transcripts, AI summaries, quizzes and fact-checks for AI agents"
|
|
10
|
+
readme = {file = "README.md", content-type = "text/markdown"}
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [
|
|
14
|
+
{name = "AW3 Technology, Inc.", email = "will.schulz@aw3.tech"}
|
|
15
|
+
]
|
|
16
|
+
keywords = ["youtube", "transcript", "mcp", "model-context-protocol", "ai", "video", "summary", "claude"]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"Environment :: Console",
|
|
20
|
+
"Intended Audience :: Developers",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
24
|
+
"Programming Language :: Python :: 3.10",
|
|
25
|
+
"Programming Language :: Python :: 3.11",
|
|
26
|
+
"Programming Language :: Python :: 3.12",
|
|
27
|
+
"Programming Language :: Python :: 3.13",
|
|
28
|
+
"Programming Language :: Python :: 3.14",
|
|
29
|
+
"Topic :: Multimedia :: Video",
|
|
30
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
31
|
+
]
|
|
32
|
+
requires-python = ">=3.10"
|
|
33
|
+
dependencies = [
|
|
34
|
+
# mcp 1.8-1.21 import a private pydantic helper that pydantic 2.12
|
|
35
|
+
# removed, and they don't cap pydantic, so with a current pydantic they
|
|
36
|
+
# crash on import (checked against 2.14). 1.22 is the first that works.
|
|
37
|
+
# mcp 2.x removed `mcp.server.fastmcp` (renamed to MCPServer); without the
|
|
38
|
+
# upper bound, `uvx quicktube-mcp` resolves mcp 2.x and crashes on import.
|
|
39
|
+
"mcp>=1.22,<2",
|
|
40
|
+
"httpx>=0.27,<1",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.scripts]
|
|
44
|
+
quicktube-mcp = "quicktube_mcp.server:main"
|
|
45
|
+
|
|
46
|
+
[project.urls]
|
|
47
|
+
Homepage = "https://quicktube.ai"
|
|
48
|
+
Documentation = "https://quicktube.ai/api-docs"
|
|
49
|
+
"MCP setup" = "https://quicktube.ai/api-docs#mcp-server"
|
|
50
|
+
"API keys" = "https://quicktube.ai/settings?tab=api-keys"
|
|
51
|
+
|
|
52
|
+
[tool.setuptools.packages.find]
|
|
53
|
+
where = ["."]
|
|
54
|
+
include = ["quicktube_mcp*"]
|
|
55
|
+
|
|
56
|
+
[tool.setuptools.dynamic]
|
|
57
|
+
# Single source of truth: quicktube_mcp/__init__.py
|
|
58
|
+
version = {attr = "quicktube_mcp.__version__"}
|
|
59
|
+
|
|
60
|
+
[project.optional-dependencies]
|
|
61
|
+
test = ["pytest>=7"]
|
|
62
|
+
|
|
63
|
+
[tool.pytest.ini_options]
|
|
64
|
+
testpaths = ["tests"]
|