Skip to content

Commit ff9bbe6

Browse files
- Agnistic backend for MCP.
1 parent b153840 commit ff9bbe6

File tree

13 files changed

+741
-187
lines changed

13 files changed

+741
-187
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ require (
1919
github.com/spf13/viper v1.10.1
2020
github.com/stackql/any-sdk v0.2.2-beta07
2121
github.com/stackql/go-suffix-map v0.0.1-alpha01
22-
github.com/stackql/psql-wire v0.1.1-beta23
22+
github.com/stackql/psql-wire v0.1.1-beta25
2323
github.com/stackql/stackql-parser v0.0.15-alpha06
2424
github.com/stretchr/testify v1.10.0
2525
golang.org/x/sync v0.15.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,8 @@ github.com/stackql/any-sdk v0.2.2-beta07 h1:c/MaT8p4lB30xslJo9LQm3JDWMMfzwheGXqf
469469
github.com/stackql/any-sdk v0.2.2-beta07/go.mod h1:m1o5TCfyKkdt2bREB3itwPv1MhM+lk4eu24KpPohFoY=
470470
github.com/stackql/go-suffix-map v0.0.1-alpha01 h1:TDUDS8bySu41Oo9p0eniUeCm43mnRM6zFEd6j6VUaz8=
471471
github.com/stackql/go-suffix-map v0.0.1-alpha01/go.mod h1:QAi+SKukOyf4dBtWy8UMy+hsXXV+yyEE4vmBkji2V7g=
472-
github.com/stackql/psql-wire v0.1.1-beta23 h1:1ayYMjZArfDcIMyEOKnm+Bp1zRCISw8pguvTFuUhhVQ=
473-
github.com/stackql/psql-wire v0.1.1-beta23/go.mod h1:a44Wd8kDC3irFLpGutarKDBqhJ/aqXlj1aMzO5bVJYg=
472+
github.com/stackql/psql-wire v0.1.1-beta25 h1:DFBLjtz9N1S9gIYhqsjVZtVZMVSg7c0vvirPT29+S3s=
473+
github.com/stackql/psql-wire v0.1.1-beta25/go.mod h1:a44Wd8kDC3irFLpGutarKDBqhJ/aqXlj1aMzO5bVJYg=
474474
github.com/stackql/readline v0.0.2-alpha05 h1:ID4QzGdplFBsrSnTuz8pvKzWw96JbrJg8fsLry2UriU=
475475
github.com/stackql/readline v0.0.2-alpha05/go.mod h1:OFAYOdXk/X4+5GYiDXFfaGrk+bCN6Qv0SYY5HNzD2E0=
476476
github.com/stackql/stackql-go-sqlite3 v1.0.4-stackql h1:fp70Vdw+PCVEoPrAhkyqPuAlrIiHT79mght/0rlR4oY=

internal/stackql/acid/tsm_physio/txn_provider.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ const (
2424
// that orchestrates transaction managers.
2525
type Provider interface {
2626
// Create a new transaction manager.
27-
GetOrchestrator(handler.HandlerContext) (Orchestrator, error)
27+
getOrchestrator(handler.HandlerContext) (Orchestrator, error)
2828
GetTSM(handlerCtx handler.HandlerContext) (tsm.TSM, error)
2929
}
3030

3131
type standardProvider struct {
3232
ctx txn_context.ITransactionCoordinatorContext
3333
}
3434

35-
func (sp *standardProvider) GetOrchestrator(handlerCtx handler.HandlerContext) (Orchestrator, error) {
35+
func (sp *standardProvider) getOrchestrator(handlerCtx handler.HandlerContext) (Orchestrator, error) {
3636
tsmInstance, walError := GetTSM(handlerCtx)
3737
if walError != nil {
3838
return nil, walError
@@ -67,3 +67,12 @@ func GetProviderInstance(ctx txn_context.ITransactionCoordinatorContext) (Provid
6767
})
6868
return providerSingleton, err
6969
}
70+
71+
func NewOrchestrator(handlerCtx handler.HandlerContext) (Orchestrator, error) {
72+
txnProvider, txnProviderErr := GetProviderInstance(
73+
handlerCtx.GetTxnCoordinatorCtx())
74+
if txnProviderErr != nil {
75+
return nil, txnProviderErr
76+
}
77+
return txnProvider.getOrchestrator(handlerCtx)
78+
}

internal/stackql/cmd/mcp.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import (
2222
"github.com/spf13/cobra"
2323

2424
"github.com/stackql/any-sdk/pkg/logging"
25+
"github.com/stackql/stackql/internal/stackql/acid/tsm_physio"
2526
"github.com/stackql/stackql/internal/stackql/entryutil"
2627
"github.com/stackql/stackql/internal/stackql/iqlerror"
28+
"github.com/stackql/stackql/internal/stackql/mcpbackend"
2729
"github.com/stackql/stackql/pkg/mcp_server"
2830
)
2931

@@ -53,7 +55,25 @@ var mcpSrvCmd = &cobra.Command{
5355
var config mcp_server.Config
5456
json.Unmarshal([]byte(mcpConfig), &config) //nolint:errcheck // TODO: investigate
5557
config.Server.Transport = mcpServerType
56-
server, serverErr := mcp_server.NewExampleBackendServer(
58+
var isReadOnly bool
59+
if config.Server.IsReadOnly != nil {
60+
isReadOnly = *config.Server.IsReadOnly
61+
}
62+
orchestrator, orchestratorErr := tsm_physio.NewOrchestrator(handlerCtx)
63+
iqlerror.PrintErrorAndExitOneIfError(orchestratorErr)
64+
iqlerror.PrintErrorAndExitOneIfNil(orchestrator, "orchestrator is unexpectedly nil")
65+
// handlerCtx.SetTSMOrchestrator(orchestrator)
66+
backend, backendErr := mcpbackend.NewStackqlMCPBackendService(
67+
isReadOnly,
68+
orchestrator,
69+
handlerCtx,
70+
logging.GetLogger(),
71+
)
72+
iqlerror.PrintErrorAndExitOneIfError(backendErr)
73+
iqlerror.PrintErrorAndExitOneIfNil(backend, "mcp backend is unexpectedly nil")
74+
75+
server, serverErr := mcp_server.NewAgnosticBackendServer(
76+
backend,
5777
&config,
5878
logging.GetLogger(),
5979
)

internal/stackql/driver/driver.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ func (sdf *basicStackQLDriverFactory) newSQLDriver() (StackQLDriver, error) {
4646
if err != nil {
4747
return nil, err
4848
}
49-
txnProvider, txnProviderErr := tsm_physio.GetProviderInstance(sdf.handlerCtx.GetTxnCoordinatorCtx())
50-
if txnProviderErr != nil {
51-
return nil, txnProviderErr
52-
}
53-
txnOrchestrator, orcErr := txnProvider.GetOrchestrator(sdf.handlerCtx)
49+
txnOrchestrator, orcErr := tsm_physio.NewOrchestrator(sdf.handlerCtx)
5450
if orcErr != nil {
5551
return nil, orcErr
5652
}
@@ -186,12 +182,7 @@ func (dr *basicStackQLDriver) SplitCompoundQuery(s string) ([]string, error) {
186182
}
187183

188184
func NewStackQLDriver(handlerCtx handler.HandlerContext) (StackQLDriver, error) {
189-
txnProvider, txnProviderErr := tsm_physio.GetProviderInstance(
190-
handlerCtx.GetTxnCoordinatorCtx())
191-
if txnProviderErr != nil {
192-
return nil, txnProviderErr
193-
}
194-
txnOrchestrator, orcErr := txnProvider.GetOrchestrator(handlerCtx)
185+
txnOrchestrator, orcErr := tsm_physio.NewOrchestrator(handlerCtx)
195186
if orcErr != nil {
196187
return nil, orcErr
197188
}

0 commit comments

Comments
 (0)