Skip to main content
Glama

my-portfolio-mcp

A FastMCP server (SurveyMonkey response toolkit) packaged so it installs into a Dataiku code env's site-packages, which is both readable by the impersonated run-as user and on PYTHONPATH.

Layout

my-portfolio-mcp/
├── pyproject.toml
├── README.md
└── mcpsrv/
    ├── __init__.py
    └── mcp_portfolio_server.py    # the one and only server module

Note: there is a single server module. (A previous version shipped two divergent copies — mcp_portfolio_server.py and surveymonkey_mcp.py — which caused Dataiku to run the older, buggy copy. They have been consolidated.)

Related MCP server: Dataiku DSS MCP Server

Required environment variables

Variable

Required

Purpose

SURVEYMONKEY_ACCESS_TOKEN

yes

Bearer token; the server refuses to start without it.

SURVEYMONKEY_BASE_URL

no

Defaults to https://api.surveymonkey.com/v3.

REQUIRE_EXPLICIT_CONFIRMATION

no

Defaults to true; submit_response then requires user_confirmed=True.

SURVEYMONKEY_DRAFT_DIR

no

Directory (e.g. a Dataiku managed-folder path) for persisting drafts to JSON so a draft_id survives process restarts / multiple workers. If unset, drafts are in-memory only.

LOG_LEVEL

no

Defaults to INFO.

Set these on the Dataiku code env / agent tool, not in the repo.

Install into the Dataiku code env

  1. Push this folder to a git repo your Dataiku instance can reach.

  2. In Dataiku: Administration → Code envs → DJH_Local_MCP → Packages to install, add one line:

    git+https://YOUR-GIT-HOST/you/my-portfolio-mcp.git

    (Or build a wheel — python -m build — and reference that instead.)

  3. Update / rebuild the code env.

Configure the Dataiku agent tool

  • command: python

  • args (two separate entries):

    • -m

    • mcpsrv.mcp_portfolio_server

Because the package is now in site-packages, -m resolves it and the file is readable — clearing both the ModuleNotFoundError and the Errno 13 permission error.

Equivalently, the installed console script mcp-portfolio-server runs the same main() entry point.

Local sanity check (optional)

pip install -e .
SURVEYMONKEY_ACCESS_TOKEN=xxx python -m mcpsrv.mcp_portfolio_server
# should start and wait on stdin; Ctrl-C to exit

Tools exposed

list_surveys, list_collectors, load_survey, start_response, save_answer, save_answers, review_response, submit_response, get_submitted_response.

The flow is draft-based: start_response → save_answers (bulk; or save_answer per question) → review_response → submit_response(user_confirmed=True). Submission is a single POST /collectors/{id}/responses with the full pages payload and response_status="completed".

Answers may be given by ID or by the human-readable choice/row/col text from load_survey — the server resolves labels to IDs (case-insensitive) and, on a non-match, returns an error listing the valid options. save_answers validates each answer independently, so valid ones persist even when others fail.

Adding more tools

Add more @mcp.tool()-decorated functions in mcp_portfolio_server.py. Use absolute paths or package-relative imports inside them — the tool subprocess runs from a throwaway temp working directory, so bare relative paths will break.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server framework featuring dynamic tool loading and automatic tool discovery from a dedicated directory. It leverages FastMCP to provide a robust environment for building, configuring, and testing individual Python-based tools.
    1
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables dynamic creation and code generation of MCP servers using FastMCP, with tools for adding custom tools, resources, and generating runnable Python code.
    41
    MIT