FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

feat: Add standalone MCP server as a first-class component by patelchaitany · Pull Request #6957 · feast-dev/feast · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .baseline  (1) .go  (8) .lock  (1) .md  (8) .py  (20) .toml  (1) .txt  (15) .yaml  (10) .yml  (1) No extension  (2) All 10 file types selected
Only manifest files
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
47 changes: 47 additions & 0 deletions .github/workflows/publish_images.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,50 @@ jobs:
docker push ${REGISTRY}/${{ matrix.component }}:latest
fi
fi

# The feast-mcp image is a thin wrapper over the feature-server image, so it
# cannot be built in the matrix above -- its base has to be pushed first.
build-publish-feast-mcp-image:
if: github.repository == 'feast-dev/feast'
needs: build-publish-docker-images
runs-on: ubuntu-latest
env:
REGISTRY: quay.io/feastdev
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref || github.ref }}
submodules: 'true'
- id: get-version
uses: ./.github/actions/get-semantic-release-version
with:
custom_version: ${{ github.event.inputs.custom_version }}
token: ${{ github.event.inputs.token }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
- name: Login to Quay.io
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAYIO_USERNAME }}
password: ${{ secrets.QUAYIO_TOKEN }}
- name: Build and push image
env:
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
run: |
make build-feast-mcp-docker REGISTRY=${REGISTRY} VERSION=${VERSION_WITHOUT_PREFIX} \
BASE_TAG=${VERSION_WITHOUT_PREFIX} DOCKER_PUSH=true DOCKER_PLATFORMS=linux/amd64,linux/arm64
- name: Push latest tag
env:
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
HIGHEST_SEMVER_TAG: ${{ steps.get-version.outputs.highest_semver_tag }}
run: |
echo "Only push to latest tag if tag is the highest semver version $HIGHEST_SEMVER_TAG"
if [ "${VERSION_WITHOUT_PREFIX}" = "${HIGHEST_SEMVER_TAG:1}" ]
then
docker buildx imagetools create -t ${REGISTRY}/feast-mcp:latest ${REGISTRY}/feast-mcp:${VERSION_WITHOUT_PREFIX}
fi
12 changes: 6 additions & 6 deletions .secrets.baseline

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions Makefile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,14 @@ test-python-unit: ## Run Python unit tests (use pattern=<pattern> to filter test
--cov-report=term-missing \
sdk/python/tests/unit

# Standalone `feast mcp` server (feast[mcp-server] extra). Already covered by
# test-python-unit; this target is for iterating on the MCP server alone.
test-python-unit-mcp: ## Run unit tests for the standalone `feast mcp` server
uv run python -m pytest -n 4 --color=yes $(if $(pattern),-k "$(pattern)") \
--cov=sdk/python/feast/mcp \
--cov-report=term-missing \
sdk/python/tests/unit/mcp

# Fast unit tests only
test-python-unit-fast: ## Run fast unit tests only (no external dependencies)
uv run python -m pytest sdk/python/tests/unit -n auto -x --tb=short
Expand Down Expand Up @@ -755,6 +763,20 @@ build-go-feature-server-docker: ## Build Go Feature Server Docker iamge
push-go-feature-server-docker: ## Push Go Feature Server Docker image
docker push $(REGISTRY)/go-feature-server:$(VERSION)

push-feast-mcp-docker: ## Push Feast MCP Server Docker image
docker push $(REGISTRY)/feast-mcp:$(VERSION)

# Wraps an already-published feature-server image, so that image must exist
# before this builds. BASE_TAG defaults to VERSION; override it to wrap an
# older feature-server release.
build-feast-mcp-docker: ## Build Feast MCP Server Docker image
docker buildx build $(if $(DOCKER_PLATFORMS),--platform $(DOCKER_PLATFORMS),) \
--build-arg BASE_IMAGE=$(REGISTRY)/feature-server \
--build-arg BASE_TAG=$(if $(BASE_TAG),$(BASE_TAG),$(VERSION)) \
-t $(REGISTRY)/feast-mcp:$(VERSION) \
-f sdk/python/feast/mcp/docker/Dockerfile \
$(if $(filter true,$(DOCKER_PUSH)),--push,--load) sdk/python/feast/mcp/docker

##@ Dev images

build-feature-server-dev: ## Build Feature Server Dev Docker image
Expand Down
2 changes: 2 additions & 0 deletions docs/SUMMARY.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
* [Retrieval Augmented Generation (RAG) with Feast](tutorials/rag-with-docling.md)
* [RAG Fine Tuning with Feast and Milvus](../examples/rag-retriever/README.md)
* [MCP - AI Agent Example](../examples/mcp_feature_store/README.md)
* [Standalone MCP Server Example](../examples/feast_mcp_server/README.md)
* [Feast-Powered AI Agent](../examples/agent_feature_store/README.md)
* [Demo Notebooks](tutorials/demo-notebooks.md)
* [Feature Quality Monitoring Quickstart](../examples/monitoring/monitoring-quickstart.ipynb)
Expand Down Expand Up @@ -206,6 +207,7 @@
* [Python feature server](reference/feature-servers/python-feature-server.md)
* [\[Alpha\] Go feature server](reference/feature-servers/go-feature-server.md)
* [MCP Feature Server](reference/feature-servers/mcp-feature-server.md)
* [Standalone MCP server](reference/feature-servers/mcp-server.md)
* [Offline Feature Server](reference/feature-servers/offline-feature-server.md)
* [Registry server](reference/feature-servers/registry-server.md)
* [\[Beta\] Web UI](reference/alpha-web-ui.md)
Expand Down
10 changes: 9 additions & 1 deletion docs/reference/feature-servers/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,12 @@ Feast users can choose to retrieve features from a feature server, as opposed to

{% content-ref url="registry-server.md" %}
[registry-server.md](registry-server.md)
{% endcontent-ref %}
{% endcontent-ref %}

{% content-ref url="mcp-feature-server.md" %}
[mcp-feature-server.md](mcp-feature-server.md)
{% endcontent-ref %}

{% content-ref url="mcp-server.md" %}
[mcp-server.md](mcp-server.md)
{% endcontent-ref %}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

Feast can expose the Python Feature Server as an MCP (Model Context Protocol) server using `fastapi_mcp`. When enabled, MCP clients can discover and call Feast tools such as online feature retrieval.

This mounts MCP inside the feature server process. For a separately deployable MCP server that proxies both the feature server and the registry, see the [Standalone MCP server](mcp-server.md), started with `feast mcp`.

## Installation

```bash
Expand Down
Loading
Loading

Back | FazBrowse Home | New Git URL