Add readme file

This commit is contained in:
2026-08-22 10:21:10 +09:00
parent 2b43592151
commit f8b2e93cc1
+130
View File
@@ -0,0 +1,130 @@
# Go through the following steps to use this MCP serer:
1) Create Python Virtual Env from your root directory
python -m venv venv
2) Activate Virtual Env
a) Windows: venv\Scripts\activate.bat
b) Unix: source venv/bin/activate
3) Installing Dependencies
pip install -r requirements.txt
4) Start MCP Sever
python -m mcp_server
5) In your project where you want to use this Server, implemt a tool like the following:
@tool("FastMCP Batch Web Content extraction Tool")
def fastmcp_batch_web_content_extraction_tool(urls: list[str], query: str) -> str:
"""
Connects directly to the FastMCP HTTP server to scrape and extract text from
a list of multiple URLs simultaneously in parallel.
"""
async def call_fast_mcp():
# Initialize client using FastMCP's precise matching transport protocol
transport = StreamableHttpTransport("http://localhost:8000/mcp/")
async with Client(transport) as client:
# call_tool abstracts away deep JSON-RPC structures
result = await client.call_tool("batch_web_content_extraction", {"urls": urls, "query": query})
return result
try:
# Spin up clean execution loop for this worker thread
mcp_response = asyncio.run(call_fast_mcp())
# FastMCP Client response objects expose string contents naturally via .content
# Ensure we safely extract the raw text string from the MCP content blocks
if hasattr(mcp_response, "content") and mcp_response.content:
# The text is inside the first content block object
raw_content = mcp_response.content[0].text
else:
# Fallback to string casting if it's already a plain string
raw_content = str(mcp_response)
# Parse JSON and pretty-format the string back to the CrewAI Agent
try:
parsed_data = json.loads(raw_content)
formatted_output = []
for item in parsed_data:
formatted_output.append(f"=== SOURCE URL: {item['url']} ===")
formatted_output.append(f"STATUS: {item['status']}")
formatted_output.append(f"CONTENT:\n{item['content']}\n")
formatted_output.append("=" * 40 + "\n")
logger.info(f"""FastMCP Batch Web Content extraction tool used.\nURLs:\n{"\n".join(urls)}\nQuery: {query}\nResult:\n{"\n".join(formatted_output)}""")
return "\n".join(formatted_output)
except json.JSONDecodeError:
logger.info(f"""FastMCP Batch Web Content extraction tool used. Error in JSON formatting so raw data returned:\nURLs:\n{"\n".join(urls)}\nQuery: {query}\nResult:\n{raw_content}""")
return raw_content
except Exception as e:
logger.info(f"""FastMCP Batch Web Content extraction tool used. Error executing the tool and no data returned.""")
return f"Error executing Parallel FastMCP tool over Streamable HTTP: {str(e)}"
# Info about this Server
MCP server that fetches multiple URLs in parallel and extracts the content relevant to a query.
-Clean and deduplicate URLs
-Clean extracted text
-Semantic selection to keep only text relevant to the query
-Limit number of extracted characters per URL and also limit the total characters extracted to avoid returning too much text
Arguments:
urls:
List of URLs to process.
query:
User question or information wanted
Semantic ranking is performed against this query.
Optional Arguments:
max_chars_per_url:
Maximum characters returned for each URL.
Default set to 6000
max_total_chars:
Maximum characters returned across all URLs.
Default set to 30000
top_k_chunks:
Maximum number of relevant chunks per URL.
Default set to 6
min_relevance_score:
Minimum semantic similarity score.
Default set to 0.25
Returns:
List of relevant web content results.
Below an example of info return for one URL:
========================================
=== SOURCE URL: https://www.marketsandmarkets.com/Market-Reports/3d-scanner-market-119952472.html ===
STATUS: success
CONTENT:
[Semantic Retrieval]
Query: Extract information about companies, products, pricing, key features, target customers, market trends, growth, and competitive information related to 3D scanners.
Chunks considered: 109
Chunks selected: 6
Relevance scores: [0.759, 0.757, 0.749, 0.71, 0.7, 0.696]
Content characters: 3046
Truncated: False
--- RELEVANT CONTENT ---
Chunk 1
Chunk 2
Chunk 3
Chunk 4
Chunk 5
Chunk 6
========================================