github Python analyzed ae71696

Whatsonyourmind/deckforge

github

Executive-ready slides, one API call away. API-first AI presentation engine with 32 slide types, 24 chart types, 15 themes, finance vertical. PPTX + Google Slides. MCP server for AI agents. TypeScript SDK.

maintainer
Whatsonyourmind
license
MIT
first seen
2026-06-10
last seen
2026-08-26
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 6 tools
transport stdio · http counts 6 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • cost_estimate
  • generate
  • pricing
  • render
  • slide_types
  • themes
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit ae71696 · analyzer v33 · 1w ago

skills & prompt files 1

danger signals3

code evidence vv0.1.0 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 332

filesystem 14

  • fs Whatsonyourmind-deckforge-ae71696/quality/ppteval.py :29 from pathlib import Path
  • fs Whatsonyourmind-deckforge-ae71696/quality/score_demos.py :18 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/scripts/generate_chart_demos.py :27 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/scripts/generate_demos.py :28 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/scripts/setup_deckforge_db.py :15 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/scripts/test_content_pipeline.py :24 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/scripts/validate-demos.py :30 from pathlib import Path
  • fs Whatsonyourmind-deckforge-ae71696/src/deckforge/layout/text_measurer.py :7 from pathlib import Path
  • fs Whatsonyourmind-deckforge-ae71696/src/deckforge/rendering/element_renderers/image.py :85 img = Image.open(image_stream)
  • fs Whatsonyourmind-deckforge-ae71696/src/deckforge/rendering/thumbnail.py :11 import shutil
  • fs Whatsonyourmind-deckforge-ae71696/src/deckforge/themes/registry.py :6 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/tests/test_ppteval_harness.py :12 from pathlib import Path
  • fs (weak) Whatsonyourmind-deckforge-ae71696/tests/unit/test_preview_endpoint.py :12 import shutil
  • fs (weak) Whatsonyourmind-deckforge-ae71696/tests/unit/test_text_measure.py :12 from pathlib import Path

shell / exec 1

  • shell Whatsonyourmind-deckforge-ae71696/src/deckforge/rendering/thumbnail.py :12 import subprocess

network 25

  • net Whatsonyourmind-deckforge-ae71696/growth/integrations/autogen-tool.py :23 import httpx
  • net (weak) Whatsonyourmind-deckforge-ae71696/growth/integrations/claude-agent-example.py :312 import httpx
  • net Whatsonyourmind-deckforge-ae71696/growth/integrations/crewai-tool.py :22 import httpx
  • net Whatsonyourmind-deckforge-ae71696/growth/integrations/langchain-tool.py :23 import httpx
  • net (weak) Whatsonyourmind-deckforge-ae71696/scripts/setup_deckforge_db.py :16 from urllib.parse import urlparse
  • net (weak) Whatsonyourmind-deckforge-ae71696/scripts/validate-demos.py :87 import urllib.error
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/api/middleware/auth.py :17 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/api/middleware/x402.py :22 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/api/routes/onboarding.py :15 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/intelligence/client.py :13 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/llm/adapters/ollama.py :13 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/rendering/element_renderers/image.py :47 import httpx
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/rendering/gslides/oauth.py :11 from urllib.parse import urlencode
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/security/url_guard.py :11 import socket
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/workers/settings.py :10 from urllib.parse import urlparse
  • net Whatsonyourmind-deckforge-ae71696/src/deckforge/workers/webhooks.py :12 import httpx
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/conftest.py :14 from httpx import ASGITransport, AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_auth.py :6 from httpx import AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_health.py :6 from httpx import AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_idempotency.py :6 from httpx import AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_openapi.py :8 from httpx import AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_rate_limit.py :6 from httpx import AsyncClient
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_workers.py :16 from httpx import Response
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/test_auth_unkey.py :78 with patch("deckforge.api.middleware.auth.httpx.AsyncClient") as mock_client:
  • net (weak) Whatsonyourmind-deckforge-ae71696/tests/test_discovery.py :6 from httpx import ASGITransport, AsyncClient

secrets 7

  • secrets Whatsonyourmind-deckforge-ae71696/growth/integrations/autogen-tool.py :35 key = os.environ.get("DECKFORGE_API_KEY", "")
  • secrets (weak) Whatsonyourmind-deckforge-ae71696/growth/integrations/claude-agent-example.py :315 api_key = os.environ.get("DECKFORGE_API_KEY", "")
  • secrets Whatsonyourmind-deckforge-ae71696/growth/integrations/crewai-tool.py :115 key = self.api_key or os.environ.get("DECKFORGE_API_KEY", "")
  • secrets Whatsonyourmind-deckforge-ae71696/growth/integrations/langchain-tool.py :37 key = api_key or os.environ.get("DECKFORGE_API_KEY", "")
  • secrets (weak) Whatsonyourmind-deckforge-ae71696/scripts/setup-stripe.py :124 api_key = os.environ.get("STRIPE_SECRET_KEY") or os.environ.get(
  • secrets (weak) Whatsonyourmind-deckforge-ae71696/scripts/test_content_pipeline.py :332 os.environ.get("ANTHROPIC_API_KEY")
  • secrets (weak) Whatsonyourmind-deckforge-ae71696/scripts/validate-demos.py :158 default=os.environ.get("DECKFORGE_TEST_API_KEY", ""),

database 37

  • db Whatsonyourmind-deckforge-ae71696/alembic/env.py :13 from sqlalchemy import pool
  • db Whatsonyourmind-deckforge-ae71696/alembic/versions/001_create_users_and_api_keys.py :10 import sqlalchemy as sa
  • db Whatsonyourmind-deckforge-ae71696/alembic/versions/002_create_decks_and_jobs.py :10 import sqlalchemy as sa
  • db Whatsonyourmind-deckforge-ae71696/alembic/versions/003_batch_webhook_tables.py :10 import sqlalchemy as sa
  • db Whatsonyourmind-deckforge-ae71696/alembic/versions/004_billing_tables.py :10 import sqlalchemy as sa
  • db Whatsonyourmind-deckforge-ae71696/alembic/versions/005_payment_events.py :10 import sqlalchemy as sa
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/api/deps.py :12 from redis.asyncio import Redis
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/api/middleware/auth.py :20 from sqlalchemy.ext.asyncio import AsyncSession
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/api/middleware/rate_limit.py :16 from redis.asyncio import Redis
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/api/routes/health.py :10 from sqlalchemy import text
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/api/routes/onboarding.py :17 from sqlalchemy import select
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/billing/credits.py :16 from sqlalchemy.ext.asyncio import AsyncSession
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/billing/stripe_webhooks.py :15 from sqlalchemy.ext.asyncio import AsyncSession
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/base.py :9 from sqlalchemy import MetaData
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/engine.py :11 from sqlalchemy.ext.asyncio import (
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/api_key.py :8 from sqlalchemy import JSON, ForeignKey, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/batch_job.py :8 from sqlalchemy import ForeignKey, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/deck.py :8 from sqlalchemy import JSON, ForeignKey, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/job.py :8 from sqlalchemy import JSON, ForeignKey, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/payment_event.py :13 from sqlalchemy import DateTime, Numeric, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/usage.py :12 from sqlalchemy import Date, ForeignKey, String, UniqueConstraint, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/user.py :8 from sqlalchemy import String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/models/webhook_registration.py :8 from sqlalchemy import JSON, Boolean, ForeignKey, String, func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/analytics.py :12 from sqlalchemy import func, select, text
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/api_key.py :8 from sqlalchemy import select, update
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/batch.py :8 from sqlalchemy import select, update
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/deck.py :8 from sqlalchemy import func as sa_func
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/job.py :8 from sqlalchemy import select, update
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/usage.py :13 from sqlalchemy import select, update
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/db/repositories/webhook.py :8 from sqlalchemy import delete, select
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/main.py :11 from redis.asyncio import Redis
  • db Whatsonyourmind-deckforge-ae71696/src/deckforge/workers/settings.py :14 from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
  • db (weak) Whatsonyourmind-deckforge-ae71696/tests/conftest.py :15 from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
  • db (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_db.py :16 from sqlalchemy import inspect, text
  • db (weak) Whatsonyourmind-deckforge-ae71696/tests/integration/test_workers.py :17 from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
  • db (weak) Whatsonyourmind-deckforge-ae71696/tests/test_analytics.py :15 from sqlalchemy.ext.asyncio import AsyncSession
  • db (weak) Whatsonyourmind-deckforge-ae71696/tests/test_batch_webhooks.py :138 from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine

tool registrations 6

  • render Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :48
  • generate Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :58
  • themes Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :68
  • slide_types Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :74
  • cost_estimate Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :80
  • pricing Whatsonyourmind-deckforge-ae71696/src/deckforge/mcp/server.py :86

declared dependencies 39

  • mcp@>=1.26,<2
  • fastapi@>=0.135.2
  • uvicorn@>=0.42.0
  • pydantic@>=2.12.5
  • pydantic-settings@>=2.6
  • sqlalchemy@>=2.0.48
  • alembic@>=1.18.4
  • psycopg@>=3.2
  • arq@>=0.27.0
  • redis@>=5.0
  • boto3@>=1.36
  • httpx@>=0.28.1
  • python-multipart@*
  • kiwisolver@>=1.4
  • python-pptx@>=1.0.2
  • Pillow@>=12.1.1
  • pyyaml@>=6.0
  • plotly@>=6.6,<7
  • kaleido@>=0.2.1,<1.0
  • anthropic@>=0.87.0
  • openai@>=1.70.0,<2.0
  • google-generativeai@>=0.8.0
  • sse-starlette@>=3.3.3
  • pandas@>=2.2
  • openpyxl@>=3.1
  • unkey-py@>=0.7
  • x402@>=0.1
  • pdf2image@>=1.17.0
  • google-api-python-client@>=2.150.0
  • google-auth@>=2.35.0
  • google-auth-oauthlib@>=1.2.1
  • pytest@>=8.3
  • pytest-asyncio@>=0.24
  • pytest-cov@>=6.0
  • fakeredis@>=2.25
  • aiosqlite@>=0.20
  • respx@>=0.22
  • ruff@>=0.9
  • mypy@>=1.14