mirror of
https://github.com/penpot/penpot-mcp.git
synced 2026-04-25 11:18:37 +00:00
Add docker file
This commit is contained in:
parent
c931e6978b
commit
71a7ec214e
37
Dockerfile
Normal file
37
Dockerfile
Normal file
@ -0,0 +1,37 @@
|
||||
## ------ Build
|
||||
FROM node:22.21.1 AS build
|
||||
|
||||
RUN set -ex; \
|
||||
apt update ; \
|
||||
apt -y install python3 python3-venv pip
|
||||
|
||||
RUN python3 -m venv /opt/venv
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV PATH="/opt/venv/bin:$PATH"
|
||||
|
||||
COPY requirements.txt .
|
||||
|
||||
RUN pip install -Ur requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN set -ex; \
|
||||
cd mcp-server; \
|
||||
npm install --frozen-lockfile; \
|
||||
npm run build;
|
||||
|
||||
# MCP API Server
|
||||
EXPOSE 4401
|
||||
|
||||
# WebSocket server
|
||||
EXPOSE 4402
|
||||
|
||||
# Repl server
|
||||
EXPOSE 4403
|
||||
|
||||
ENV PLUGIN_API_URL="https://penpot-plugins-api-doc.pages.dev/"
|
||||
|
||||
#ENTRYPOINT node ./dist/index.js
|
||||
CMD [ "./docker-entrypoint.sh" ]
|
||||
7
docker-entrypoint.sh
Executable file
7
docker-entrypoint.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Parsing: $PLUGIN_API_URL"
|
||||
|
||||
(cd python-scripts && python prepare_api_docs.py $PLUGIN_API_URL)
|
||||
|
||||
(cd mcp-server && node dist/index.js --multi-user)
|
||||
@ -11,9 +11,11 @@ from markdownify import MarkdownConverter
|
||||
from ruamel.yaml import YAML
|
||||
from ruamel.yaml.scalarstring import LiteralScalarString
|
||||
from sensai.util import logging
|
||||
import sys
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_API_DOCS_URL="https://penpot-plugins-api-doc.pages.dev"
|
||||
|
||||
class PenpotAPIContentMarkdownConverter(MarkdownConverter):
|
||||
"""
|
||||
@ -131,9 +133,9 @@ class YamlConverter:
|
||||
|
||||
|
||||
class PenpotAPIDocsProcessor:
|
||||
def __init__(self):
|
||||
def __init__(self, url=None):
|
||||
self.md_converter = PenpotAPIContentMarkdownConverter()
|
||||
self.base_url = "https://penpot-plugins-api-doc.pages.dev"
|
||||
self.base_url = DEFAULT_API_DOCS_URL
|
||||
self.types: dict[str, TypeInfo] = {}
|
||||
self.type_referenced_by: dict[str, set[str]] = collections.defaultdict(set)
|
||||
|
||||
@ -234,7 +236,10 @@ class PenpotAPIDocsProcessor:
|
||||
|
||||
def main():
|
||||
target_dir = Path(__file__).parent.parent / "mcp-server" / "data"
|
||||
PenpotAPIDocsProcessor().run(target_dir=str(target_dir))
|
||||
url = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_API_DOCS_URL
|
||||
|
||||
print("Fetching plugin data from: {}".format(url))
|
||||
PenpotAPIDocsProcessor(url).run(target_dir=str(target_dir))
|
||||
|
||||
|
||||
def debug_type_conversion(rel_url: str):
|
||||
|
||||
31
requirements.txt
Normal file
31
requirements.txt
Normal file
@ -0,0 +1,31 @@
|
||||
beautifulsoup4==4.14.3
|
||||
certifi==2025.11.12
|
||||
charset-normalizer==3.4.4
|
||||
contourpy==1.3.3
|
||||
cycler==0.12.1
|
||||
fonttools==4.61.0
|
||||
idna==3.11
|
||||
joblib==1.5.2
|
||||
kiwisolver==1.4.9
|
||||
markdownify==1.2.2
|
||||
matplotlib==3.10.7
|
||||
numpy==2.3.5
|
||||
packaging==25.0
|
||||
pandas==2.3.3
|
||||
pillow==12.0.0
|
||||
pyparsing==3.2.5
|
||||
python-dateutil==2.9.0.post0
|
||||
pytz==2025.2
|
||||
requests==2.32.5
|
||||
ruamel.yaml==0.18.16
|
||||
ruamel.yaml.clib==0.2.15
|
||||
scikit-learn==1.7.2
|
||||
scipy==1.16.3
|
||||
seaborn==0.13.2
|
||||
sensai==1.6.0
|
||||
six==1.17.0
|
||||
soupsieve==2.8
|
||||
threadpoolctl==3.6.0
|
||||
typing_extensions==4.15.0
|
||||
tzdata==2025.2
|
||||
urllib3==2.5.0
|
||||
Loading…
x
Reference in New Issue
Block a user