Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
4faec43
mcp-server impl (#1)
freeznet May 2, 2025
918e357
Bump github.com/golang-jwt/jwt/v4 from 4.5.1 to 4.5.2 (#3)
dependabot[bot] May 6, 2025
d0e2d04
Bump github.com/golang-jwt/jwt/v5 from 5.2.1 to 5.2.2 (#2)
dependabot[bot] May 6, 2025
16670e0
[`kafka_admin_groups`] fix `delete-offset`, add `set-offset` (#4)
freeznet May 6, 2025
e218f82
Update SDK import paths and fix dependencies (#6)
freeznet May 7, 2025
d9cae0e
doc: update release doc (#5)
freeznet May 7, 2025
db88a7f
fix: cleanup (#8)
freeznet May 7, 2025
f3a5833
fix: features flag not cover all tools (#9)
freeznet May 9, 2025
6ae3143
support create serverless cluster (#7)
freeznet May 9, 2025
b6bcc95
Enhance StreamNative Cloud MCP Server Instructions (#15)
freeznet May 12, 2025
7860715
fix kafka consumer not commit correct offsets (#14)
freeznet May 12, 2025
e235881
Enhance Pulsar admin functions and connectors tools with package URL …
freeznet May 12, 2025
4b86c51
update README (#21)
nlu90 May 12, 2025
dbf6f3e
Enhance documentation for features and tools (#18)
freeznet May 13, 2025
8870655
fix README (#24)
freeznet May 13, 2025
9852d7c
Support start mcp server in SSE (#17)
sijie May 13, 2025
2e46f72
Support docker image & brew tap for snmcp (#25)
freeznet May 13, 2025
4bdd430
fix auth and send PR to homebrew (#27)
freeznet May 13, 2025
bc25192
fix ref env (#28)
freeznet May 13, 2025
c8d94c4
fix: use short-commit-hash to create brew PR (#29)
freeznet May 13, 2025
c5c93c3
fix: use ${{github.ref_name}} for homebrew PR (#30)
freeznet May 13, 2025
74284ca
fix: Tool Input Array JSON Schema Validation (#31)
sijie May 15, 2025
b99519f
fix: help configure partitioned flag for pulsar topics stats tool (#32)
freeznet May 16, 2025
41de521
Fix README typo (#34)
sijie May 19, 2025
5fec716
Fix nil checks in GetMcpContext (#35)
sijie May 19, 2025
d78a845
Add AGNETS.md for coding agents (#36)
sijie May 20, 2025
e577b81
discovery functions as tools (#37)
freeznet May 28, 2025
cbbbf01
fix: get pulsar service url from cmd (#42)
quocthinhle Jun 9, 2025
9760de5
bump to mcp-go 0.31.0 (#43)
freeznet Jun 16, 2025
f928dc1
feat: Add multi-platform Docker build support with backward compatibi…
sijie Jun 30, 2025
6c9d3d8
fix: mcp-server failed to start when connecting to external pulsar cl…
sijie Jun 30, 2025
c7186ff
Bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.3.0 (#46)
dependabot[bot] Jun 30, 2025
e691d7b
Abstract session for SNCloud, Pulsar & Kafka Clients (#49)
freeznet Aug 4, 2025
8d85aca
Refactor Pulsar client initialization in pftools (#51)
freeznet Aug 8, 2025
91b6080
fix: Pulsar functions admin client retrieval in handler to use sessio…
freeznet Aug 15, 2025
c2fba34
feat: Add CLAUDE.md and abstract MCP tool builder checker (#54)
freeznet Sep 2, 2025
bfa468c
feat: Enhance Pulsar Function Manager with cluster error handling (#57)
freeznet Sep 3, 2025
db2bf83
fix pftools auth error (#58)
freeznet Oct 29, 2025
1ccb99a
build(dependencies): update module dependencies (#62)
freeznet Dec 16, 2025
9483f13
fix license (#63)
freeznet Dec 16, 2025
60577ea
feat(mcp): add multi-session Pulsar support with auth middleware (#64)
freeznet Dec 18, 2025
833b69a
chore: upgrade golangci-lint to v2 and modernize codebase (#68)
freeznet Jan 12, 2026
224769a
feat(charts): add Helm chart for StreamNative MCP Server (#67)
freeznet Jan 14, 2026
d72a8ed
chore: add go-sdk dependency
freeznet Jan 18, 2026
d512fc4
feat: add go-sdk server wrapper
freeznet Jan 18, 2026
95ac792
refactor: migrate stdio transport to go-sdk
freeznet Jan 18, 2026
ad973b0
chore(gitignore): add .agents directory to ignore list
freeznet Jan 18, 2026
6625f14
refactor: update tool builder interface for go-sdk
freeznet Jan 18, 2026
5cb7783
feat(mcp): add go-sdk schema helpers
freeznet Jan 18, 2026
c0df316
fix: complete kafka topics tool migration
freeznet Jan 18, 2026
31fe2e3
refactor: migrate kafka groups tools to go-sdk
freeznet Jan 18, 2026
59c619a
feat: migrate kafka produce tool to go-sdk
freeznet Jan 19, 2026
13efd34
feat: migrate kafka schema registry tool to go-sdk
freeznet Jan 19, 2026
8dc1fb6
feat: migrate kafka consume tool to go-sdk
freeznet Jan 19, 2026
abd19b4
feat: migrate pulsar admin topic tool to go-sdk
freeznet Jan 19, 2026
7318564
feat: migrate pulsar admin tenant tool to go-sdk
freeznet Jan 19, 2026
8766a8d
feat: migrate pulsar namespace tool to go-sdk
freeznet Jan 19, 2026
8523ca7
feat: migrate pulsar schema tool to go-sdk
freeznet Jan 19, 2026
567314e
feat: migrate pulsar admin functions tool to go-sdk
freeznet Jan 19, 2026
0f45dfb
feat: migrate pulsar admin brokers/cluster/sources/sinks/subscription
freeznet Jan 19, 2026
f447263
feat: migrate pulsar broker stats tool
freeznet Jan 19, 2026
b05eaad
feat: migrate functions worker tool to go-sdk
freeznet Jan 19, 2026
8f58542
feat: migrate namespace policy tools to go-sdk
freeznet Jan 19, 2026
df1d363
feat: migrate pulsar topic policy tool
freeznet Jan 19, 2026
9176e3e
feat: migrate ns isolation policy tool to go-sdk
freeznet Jan 19, 2026
914b8e6
feat: migrate pulsar packages tool to go-sdk
freeznet Jan 19, 2026
227a802
feat: migrate pulsar resource quotas tool
freeznet Jan 19, 2026
2848008
feat: migrate pulsar client produce tool to go-sdk
freeznet Jan 19, 2026
da4d353
feat: migrate pulsar consume tool to go-sdk
freeznet Jan 19, 2026
5e1c636
feat: migrate pftools types to go-sdk
freeznet Jan 19, 2026
78db797
fix: migrate pftools schema conversion
freeznet Jan 19, 2026
8e00036
refactor: migrate pftools manager to go-sdk
freeznet Jan 19, 2026
b5878dd
refactor: migrate pftools invocation results
freeznet Jan 19, 2026
3aa7762
fix: align functions-as-tools integration with go-sdk
freeznet Jan 19, 2026
bf9098a
feat: add MCP request context helpers
freeznet Jan 19, 2026
1d981c5
fix: align go-sdk middleware recovery
freeznet Jan 19, 2026
e7978fe
test: add testcontainers e2e scaffolding
freeznet Jan 19, 2026
a983912
test: migrate e2e client to go-sdk
freeznet Jan 19, 2026
b875f8b
test: add pulsar admin e2e coverage
freeznet Jan 19, 2026
230b12e
test(e2e): add kafka e2e coverage
freeznet Jan 19, 2026
6b63081
ci: add full test workflow for migration
freeznet Jan 19, 2026
37f522f
test: verify auth isolation in e2e runner
freeznet Jan 19, 2026
63c20f5
docs(mcp): update architecture and tool implementation details
freeznet Jan 19, 2026
564aa19
stash
freeznet Jan 19, 2026
5a92733
go mod tidy
freeznet Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: CI
on: [push, pull_request]

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: "go.mod"

- name: Download dependencies
run: go mod download

- name: Run unit tests
run: go test -race ./...

- name: Run e2e test suite
run: go test ./cmd/snmcp-e2e/... -v
49 changes: 49 additions & 0 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: E2E Tests

on:
push:
paths:
- "charts/**"
- "cmd/snmcp-e2e/**"
- "scripts/e2e-test.sh"
- ".github/workflows/e2e.yaml"
pull_request:
paths:
- "charts/**"
- "cmd/snmcp-e2e/**"
- "scripts/e2e-test.sh"
- ".github/workflows/e2e.yaml"
workflow_dispatch:

permissions:
contents: read

jobs:
e2e:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: "go.mod"

- name: Set up Helm
uses: azure/setup-helm@v4

- name: Set up Kind
uses: helm/kind-action@v1
with:
cluster_name: kind

- name: Download dependencies
run: go mod download

- name: Run E2E tests
run: ./scripts/e2e-test.sh all

- name: Cleanup
if: always()
run: ./scripts/e2e-test.sh cleanup
32 changes: 32 additions & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Unit Tests
on: [push, pull_request]

permissions:
contents: read

jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]

runs-on: ${{ matrix.os }}

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: "go.mod"

- name: Download dependencies
run: go mod download

- name: Run unit tests
run: go test -race ./...

- name: Build
run: make build
77 changes: 77 additions & 0 deletions .github/workflows/goreleaser.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: GoReleaser Release
on:
push:
tags:
- "v*"
permissions:
contents: write
id-token: write
attestations: write

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Login to DockerHub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: "go.mod"

- name: Download dependencies
run: go mod download

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552
with:
distribution: goreleaser
# GoReleaser version
version: "~> v2"
# Arguments to pass to GoReleaser
args: release --clean
workdir: .
env:
GITHUB_TOKEN: ${{ secrets.SNBOT_GITHUB_TOKEN }}

- name: Generate signed build provenance attestations for workflow artifacts
uses: actions/attest-build-provenance@v2
with:
subject-path: |
dist/*.tar.gz
dist/*.zip
dist/*.txt

- name: Init homebrew repository
uses: actions/checkout@v3
with:
repository: streamnative/homebrew-streamnative
token: ${{ secrets.SNBOT_GITHUB_TOKEN }}
ref: master
path: homebrew-streamnative

- name: Prepare Homebrew formula
run: |
cp ./dist/homebrew/Formula/snmcp.rb homebrew-streamnative/Formula/snmcp.rb

- name: Create Homebrew PR
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.SNBOT_GITHUB_TOKEN }}
path: homebrew-streamnative
branch: snmcp/release
branch-suffix: short-commit-hash
title: Update snmcp to ${{github.ref_name}}
body: Automated changes by Release workflow in streamnative/streamnative-mcp-server repository.
delete-branch: true
committer: StreamNative Bot <streamnativebot@streamnative.io>
commit-message: Created by streamnative-mcp-server-release-workflow
50 changes: 50 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Lint
on:
push:
pull_request:

permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'

- name: Verify dependencies
run: |
go mod verify
go mod download

LINT_VERSION=2.7.2
curl -fsSL https://github.com/golangci/golangci-lint/releases/download/v${LINT_VERSION}/golangci-lint-${LINT_VERSION}-linux-amd64.tar.gz | \
tar xz --strip-components 1 --wildcards \*/golangci-lint
mkdir -p bin && mv golangci-lint bin/

- name: Run checks
run: |
STATUS=0
assert-nothing-changed() {
local diff
"$@" >/dev/null || return 1
if ! diff="$(git diff -U1 --color --exit-code)"; then
printf '\e[31mError: running `\e[1m%s\e[22m` results in modifications that you must check into version control:\e[0m\n%s\n\n' "$*" "$diff" >&2
git checkout -- .
STATUS=1
fi
}

assert-nothing-changed go fmt ./...
assert-nothing-changed go mod tidy

bin/golangci-lint run --timeout=3m || STATUS=$?

exit $STATUS
51 changes: 51 additions & 0 deletions .github/workflows/project.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build
on:
pull_request:
branches:
- main
- release/*
paths:
- '**'
- '!docs/**'
- '!README.md'
- '!CONTRIBUTING.md'

env:
GOPRIVATE: github.com/streamnative
ACCESS_TOKEN: ${{ secrets.SNBOT_GITHUB_TOKEN }}

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Git token
run: |
git config --global user.email "snbot@streamnative.io"
git config --global user.name "StreamNative Bot"
git config --global url."https://streamnativebot:${ACCESS_TOKEN}@github.com/".insteadOf "https://github.com/"

- name: Check out code into the Go module directory
uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v3
with:
go-version-file: 'go.mod'

- name: Docker login
run: docker login -u="${{ secrets.DOCKER_USER }}" -p="${{ secrets.DOCKER_PASSWORD }}"

- name: Run GoReleaser (snapshot)
uses: goreleaser/goreleaser-action@v3
with:
version: latest
args: release --snapshot --clean
env:
GITHUB_TOKEN: ${{ secrets.SNBOT_GITHUB_TOKEN }}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.idea/
bin/
dist/

.DS_Store
tmp/
*.log

# Go
vendor
.cursor/
agents/
.serena/
.envrc
.agents/
33 changes: 33 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
version: "2"

run:
timeout: 5m
tests: true
concurrency: 4

linters:
enable:
- govet
- errcheck
- staticcheck
- revive
- ineffassign
- unused
- misspell
- nakedret
- bodyclose
- gocritic
- makezero
- gosec

formatters:
enable:
- gofmt
- goimports

output:
formats:
text:
path: stdout
print-issued-lines: true
print-linter-name: true
Loading
Loading