Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ These sections show how to use the SDK to perform API management functions. Befo
18. [Manage Descopers](#manage-descopers)
19. [Manage Engines](#manage-engines)
20. [Manage JWT Templates](#manage-jwt-templates)
21. [Manage MCP Servers](#manage-mcp-servers)

If you wish to run any of our code samples and play with them, check out our [Code Examples](#code-examples) section.

Expand Down Expand Up @@ -2321,6 +2322,62 @@ tmpl, err = descopeClient.Management.JWTTemplate().ApplyFromLibrary(context.Back
err = descopeClient.Management.JWTTemplate().Delete(context.Background(), "template-id")
```

### Manage MCP Servers

You can create, update, delete, load and list MCP servers, and manage their clients:

```go
// Create a new MCP server. The returned server includes its generated ID.
server, err := descopeClient.Management.MCPServer().Create(context.Background(), &descope.MCPServer{
Name: "my-mcp-server",
Description: "Example MCP server",
})

// Update an existing MCP server (identified by its ID). All fields are overridden.
server, err = descopeClient.Management.MCPServer().Update(context.Background(), &descope.MCPServer{
ID: "server-id",
Name: "renamed-server",
})

// Load a server by ID, or list all servers in the project.
server, err = descopeClient.Management.MCPServer().Load(context.Background(), "server-id")
servers, err := descopeClient.Management.MCPServer().LoadAll(context.Background())

// Delete one or more servers by ID.
err = descopeClient.Management.MCPServer().Delete(context.Background(), "server-id")
err = descopeClient.Management.MCPServer().DeleteBatch(context.Background(), []string{"id1", "id2"})

// Manage clients registered against an MCP server.
// CreateClient returns the generated client secret (Cleartext) — only available at creation time.
created, err := descopeClient.Management.MCPServer().CreateClient(context.Background(), &descope.MCPServerClientRequest{
MCPServerID: "server-id",
Name: "my-client",
})
if err == nil {
fmt.Println("client id:", created.ClientID)
fmt.Println("client secret (store securely!):", created.Cleartext)
}

client, err := descopeClient.Management.MCPServer().UpdateClient(context.Background(), &descope.MCPServerClientRequest{
ID: created.ID,
MCPServerID: "server-id",
Name: "renamed-client",
})

// Load a client, fetch or rotate its secret, and search clients.
client, err = descopeClient.Management.MCPServer().LoadClient(context.Background(), "server-id", created.ID, "")
secret, err := descopeClient.Management.MCPServer().GetClientSecret(context.Background(), "server-id", created.ID)
secret, err = descopeClient.Management.MCPServer().RotateClientSecret(context.Background(), "server-id", created.ID)
clients, total, err := descopeClient.Management.MCPServer().SearchClients(context.Background(), &descope.MCPServerClientSearchOptions{
MCPServerID: "server-id",
Limit: 100,
})

// Delete one or more clients within a server.
err = descopeClient.Management.MCPServer().DeleteClient(context.Background(), "server-id", created.ID)
err = descopeClient.Management.MCPServer().DeleteClients(context.Background(), "server-id", []string{"id1", "id2"})
```

## Code Examples

You can find various usage examples in the [examples folder](https://github.com/descope/go-sdk/blob/main/examples).
Expand Down
85 changes: 85 additions & 0 deletions descope/api/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,20 @@ var (
jwtTemplateLibraryList: "mgmt/jwt/templates/library/list",
jwtTemplateLibraryLoad: "mgmt/jwt/templates/library/load",
jwtTemplateLibraryApply: "mgmt/jwt/templates/library/apply",
mcpServerCreate: "mgmt/mcp/server/create",
mcpServerUpdate: "mgmt/mcp/server/update",
mcpServerDelete: "mgmt/mcp/server/delete",
mcpServerLoad: "mgmt/mcp/server/load",
mcpServersLoadAll: "mgmt/mcp/servers/all",
mcpServersDelete: "mgmt/mcp/servers/delete",
mcpServerClientCreate: "mgmt/mcp/server/client/create",
mcpServerClientUpdate: "mgmt/mcp/server/client/update",
mcpServerClientDelete: "mgmt/mcp/server/client/delete",
mcpServerClientLoad: "mgmt/mcp/server/client/load",
mcpServerClientSecret: "mgmt/mcp/server/client/secret",
mcpServerClientSecretRotate: "mgmt/mcp/server/client/secret/rotate",
mcpServerClientsDelete: "mgmt/mcp/server/clients/delete",
mcpServerClientsSearch: "mgmt/mcp/server/clients/search",
scopeClaimMappingGet: "mgmt/scopeClaimMapping/get",
scopeClaimMappingSet: "mgmt/scopeClaimMapping/set",
scopeClaimMappingDelete: "mgmt/scopeClaimMapping/delete",
Expand Down Expand Up @@ -680,6 +694,21 @@ type mgmtEndpoints struct {
jwtTemplateLibraryLoad string
jwtTemplateLibraryApply string

mcpServerCreate string
mcpServerUpdate string
mcpServerDelete string
mcpServerLoad string
mcpServersLoadAll string
mcpServersDelete string
mcpServerClientCreate string
mcpServerClientUpdate string
mcpServerClientDelete string
mcpServerClientLoad string
mcpServerClientSecret string
mcpServerClientSecretRotate string
mcpServerClientsDelete string
mcpServerClientsSearch string

scopeClaimMappingGet string
scopeClaimMappingSet string
scopeClaimMappingDelete string
Expand Down Expand Up @@ -1872,6 +1901,62 @@ func (e *endpoints) ManagementJWTTemplateLibraryApply() string {
return path.Join(e.version, e.mgmt.jwtTemplateLibraryApply)
}

func (e *endpoints) ManagementMCPServerCreate() string {
return path.Join(e.version, e.mgmt.mcpServerCreate)
}

func (e *endpoints) ManagementMCPServerUpdate() string {
return path.Join(e.version, e.mgmt.mcpServerUpdate)
}

func (e *endpoints) ManagementMCPServerDelete() string {
return path.Join(e.version, e.mgmt.mcpServerDelete)
}

func (e *endpoints) ManagementMCPServerLoad() string {
return path.Join(e.version, e.mgmt.mcpServerLoad)
}

func (e *endpoints) ManagementMCPServersLoadAll() string {
return path.Join(e.version, e.mgmt.mcpServersLoadAll)
}

func (e *endpoints) ManagementMCPServersDelete() string {
return path.Join(e.version, e.mgmt.mcpServersDelete)
}

func (e *endpoints) ManagementMCPServerClientCreate() string {
return path.Join(e.version, e.mgmt.mcpServerClientCreate)
}

func (e *endpoints) ManagementMCPServerClientUpdate() string {
return path.Join(e.version, e.mgmt.mcpServerClientUpdate)
}

func (e *endpoints) ManagementMCPServerClientDelete() string {
return path.Join(e.version, e.mgmt.mcpServerClientDelete)
}

func (e *endpoints) ManagementMCPServerClientLoad() string {
return path.Join(e.version, e.mgmt.mcpServerClientLoad)
}

func (e *endpoints) ManagementMCPServerClientSecret() string {
return path.Join(e.version, e.mgmt.mcpServerClientSecret)
}

func (e *endpoints) ManagementMCPServerClientSecretRotate() string {
return path.Join(e.version, e.mgmt.mcpServerClientSecretRotate)
}

func (e *endpoints) ManagementMCPServerClientsDelete() string {
return path.Join(e.version, e.mgmt.mcpServerClientsDelete)
}

func (e *endpoints) ManagementMCPServerClientsSearch() string {
return path.Join(e.version, e.mgmt.mcpServerClientsSearch)
}

func (e *endpoints) ManagementScopeClaimMappingGet() string {
return path.Join(e.version, e.mgmt.scopeClaimMappingGet)
}
Expand Down
Loading
Loading