Skip to main content
Glama

MCP PDF Server

by Dev-91
main.py2.89 kB
from fastapi import FastAPI, Request, UploadFile, File from fastapi.responses import RedirectResponse, FileResponse from fastapi.templating import Jinja2Templates import os, shutil from fastapi import HTTPException from manager_server.routes.files import router as files_router from fastapi.staticfiles import StaticFiles import colorlog import logging handler = colorlog.StreamHandler() handler.setFormatter(colorlog.ColoredFormatter( '%(log_color)s%(asctime)s [%(levelname)s] %(name)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', log_colors={ 'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'bold_red', } )) logger = colorlog.getLogger('manager_server') logger.addHandler(handler) logger.setLevel(logging.INFO) app = FastAPI() app.mount("/static", StaticFiles(directory="manager_server/static"), name="static") app.include_router(files_router) templates = Jinja2Templates(directory="manager_server/templates") DATA_DIR = "/app/datasheets" ALLOWED_EXTENSIONS = {'.pdf', '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'} @app.get("/") def main_page(request: Request): files = [f for f in os.listdir(DATA_DIR) if os.path.splitext(f)[1].lower() in ALLOWED_EXTENSIONS] logger.info(f"Main page accessed. Files listed: {files}") return templates.TemplateResponse("main.html", {"request": request, "files": files}) @app.post("/upload") async def upload_file(file: UploadFile = File(...)): ext = os.path.splitext(file.filename)[1].lower() if ext not in ALLOWED_EXTENSIONS: logger.warning(f"Upload attempt with disallowed file type: {file.filename}") return RedirectResponse("/", status_code=303) filename = os.path.basename(file.filename) save_path = os.path.join(DATA_DIR, filename) with open(save_path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) logger.info(f"Uploaded file: {filename}") return RedirectResponse("/", status_code=303) @app.get("/download/{filename}") def download_file(filename: str): file_path = os.path.join(DATA_DIR, filename) ext = os.path.splitext(filename)[1].lower() if not os.path.isfile(file_path) or ext not in ALLOWED_EXTENSIONS: logger.error(f"Download failed. File not found or disallowed type: {filename}") raise HTTPException(status_code=404, detail="파일이 존재하지 않습니다.") # 미디어 타입 결정 media_types = { '.pdf': 'application/pdf', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.png': 'image/png', '.gif': 'image/gif', '.bmp': 'image/bmp', '.webp': 'image/webp', } media_type = media_types.get(ext, 'application/octet-stream') logger.info(f"Downloaded file: {filename}") return FileResponse(file_path, filename=filename, media_type=media_type)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dev-91/MCP_PDF_Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server