media-agent-mcp 2.6.3__py3-none-any.whl → 2.6.4__py3-none-any.whl
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.
- media_agent_mcp/async_server.py +14 -1
- media_agent_mcp/server.py +14 -1
- {media_agent_mcp-2.6.3.dist-info → media_agent_mcp-2.6.4.dist-info}/METADATA +1 -1
- {media_agent_mcp-2.6.3.dist-info → media_agent_mcp-2.6.4.dist-info}/RECORD +7 -7
- {media_agent_mcp-2.6.3.dist-info → media_agent_mcp-2.6.4.dist-info}/WHEEL +0 -0
- {media_agent_mcp-2.6.3.dist-info → media_agent_mcp-2.6.4.dist-info}/entry_points.txt +0 -0
- {media_agent_mcp-2.6.3.dist-info → media_agent_mcp-2.6.4.dist-info}/top_level.txt +0 -0
media_agent_mcp/async_server.py
CHANGED
@@ -24,6 +24,7 @@ from typing import List, Optional
|
|
24
24
|
import json
|
25
25
|
from dotenv import load_dotenv
|
26
26
|
import uvicorn
|
27
|
+
import anyio
|
27
28
|
from functools import wraps
|
28
29
|
|
29
30
|
def async_retry(max_retries=3, delay=2):
|
@@ -80,6 +81,18 @@ from media_agent_mcp.async_wrapper import (
|
|
80
81
|
logging.basicConfig(level=logging.INFO)
|
81
82
|
logger = logging.getLogger(__name__)
|
82
83
|
|
84
|
+
# Swallow ClosedResourceError from AnyIO (e.g., SSE client disconnected)
|
85
|
+
class IgnoreClosedResourceErrorMiddleware:
|
86
|
+
def __init__(self, app):
|
87
|
+
self.app = app
|
88
|
+
|
89
|
+
async def __call__(self, scope, receive, send):
|
90
|
+
try:
|
91
|
+
await self.app(scope, receive, send)
|
92
|
+
except anyio.ClosedResourceError:
|
93
|
+
logger.warning("SSE client disconnected (ClosedResourceError). Ignoring.")
|
94
|
+
return
|
95
|
+
|
83
96
|
# Initialize FastMCP server (will be configured in main function)
|
84
97
|
load_dotenv()
|
85
98
|
mcp = FastMCP("Media-Agent-MCP-Async")
|
@@ -524,7 +537,7 @@ def main():
|
|
524
537
|
mcp.settings.port = args.port
|
525
538
|
# Use uvicorn to run SSE app with extended keep-alive timeout (5 minutes)
|
526
539
|
uvicorn.run(
|
527
|
-
mcp.sse_app(),
|
540
|
+
IgnoreClosedResourceErrorMiddleware(mcp.sse_app()),
|
528
541
|
host=args.host,
|
529
542
|
port=args.port,
|
530
543
|
timeout_keep_alive=300
|
media_agent_mcp/server.py
CHANGED
@@ -20,6 +20,7 @@ from typing import Optional, Dict, Any
|
|
20
20
|
import json
|
21
21
|
from dotenv import load_dotenv
|
22
22
|
import uvicorn
|
23
|
+
import anyio
|
23
24
|
|
24
25
|
from mcp.server.fastmcp import FastMCP
|
25
26
|
|
@@ -39,6 +40,18 @@ from media_agent_mcp.media_selectors.video_selector import select_best_video
|
|
39
40
|
logging.basicConfig(level=logging.INFO)
|
40
41
|
logger = logging.getLogger(__name__)
|
41
42
|
|
43
|
+
# Swallow ClosedResourceError from AnyIO (e.g., SSE client disconnected)
|
44
|
+
class IgnoreClosedResourceErrorMiddleware:
|
45
|
+
def __init__(self, app):
|
46
|
+
self.app = app
|
47
|
+
|
48
|
+
async def __call__(self, scope, receive, send):
|
49
|
+
try:
|
50
|
+
await self.app(scope, receive, send)
|
51
|
+
except anyio.ClosedResourceError:
|
52
|
+
logger.warning("SSE client disconnected (ClosedResourceError). Ignoring.")
|
53
|
+
return
|
54
|
+
|
42
55
|
# Initialize FastMCP server (will be configured in main function)
|
43
56
|
load_dotenv()
|
44
57
|
mcp = FastMCP("Media-Agent-MCP")
|
@@ -577,7 +590,7 @@ def main():
|
|
577
590
|
# Configure and run the server
|
578
591
|
if args.transport == 'sse':
|
579
592
|
# SSE transport
|
580
|
-
uvicorn.run(mcp.create_sse_app(), host=args.host, port=args.port)
|
593
|
+
uvicorn.run(IgnoreClosedResourceErrorMiddleware(mcp.create_sse_app()), host=args.host, port=args.port)
|
581
594
|
else:
|
582
595
|
# STDIO transport (default)
|
583
596
|
mcp.run()
|
@@ -1,7 +1,7 @@
|
|
1
1
|
media_agent_mcp/__init__.py,sha256=4kV5u8kHrsdjpMHDNUhc8h4U6AwOyw1mNptFPd2snrQ,365
|
2
|
-
media_agent_mcp/async_server.py,sha256=
|
2
|
+
media_agent_mcp/async_server.py,sha256=rZJXfC9Htx1fk2smyCyxflAdaUV8tILvvviUDE9IsnA,20339
|
3
3
|
media_agent_mcp/async_wrapper.py,sha256=hiiBhhz9WeVDfSBWVh6ovhf5jeP5ZbsieBbz9P-KPn0,15351
|
4
|
-
media_agent_mcp/server.py,sha256=
|
4
|
+
media_agent_mcp/server.py,sha256=hZ_m7HodF_ct_q3FXuCrjE6_tw6rXOim38q2sSdTI9I,19976
|
5
5
|
media_agent_mcp/ai_models/__init__.py,sha256=2kHzTYwjQw89U4QGDq0e2WqJScqDkDNlDaWHGak5JeY,553
|
6
6
|
media_agent_mcp/ai_models/omni_human.py,sha256=s_Ja4gEmHG_bgii1x4SoeV73lz0Zg_3iBRvu36goxVA,4643
|
7
7
|
media_agent_mcp/ai_models/openaiedit.py,sha256=uu4d2BgXSrjWRdNPs_SryI9muxO93pItVtEze9nDhjc,9776
|
@@ -44,8 +44,8 @@ media_agent_mcp/video/__init__.py,sha256=tfz22XEeFSeuKa3AggYCE0vCDt4IwXRCKW6avof
|
|
44
44
|
media_agent_mcp/video/processor.py,sha256=twfqmN5DbVryjDawZUcqTUcnglcBJYpUbAnApqHgD0c,12787
|
45
45
|
media_agent_mcp/video/stack.py,sha256=pyoJiJ9NhU1tjy2l3kARI9sWFoC00Fj97psxYOBi2NU,1736
|
46
46
|
media_agent_mcp/video/subtitle.py,sha256=TlrWVhWJqYTUJpnVz7eccwMAn8ixfrRzRxS6ETMY-DM,16323
|
47
|
-
media_agent_mcp-2.6.
|
48
|
-
media_agent_mcp-2.6.
|
49
|
-
media_agent_mcp-2.6.
|
50
|
-
media_agent_mcp-2.6.
|
51
|
-
media_agent_mcp-2.6.
|
47
|
+
media_agent_mcp-2.6.4.dist-info/METADATA,sha256=rqUYSncUPBBUiTQtMTWEax03GEBSCs5JyLC7ErZ_VAw,11310
|
48
|
+
media_agent_mcp-2.6.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
49
|
+
media_agent_mcp-2.6.4.dist-info/entry_points.txt,sha256=qhOUwR-ORVf9GO7emhhl7Lgd6MISgqbZr8bEuSH_VdA,70
|
50
|
+
media_agent_mcp-2.6.4.dist-info/top_level.txt,sha256=WEa0YfchpTxZgiKn8gdxYgs-dir5HepJaTOrxAGx9nY,16
|
51
|
+
media_agent_mcp-2.6.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|