mirror of
https://github.com/paymog/slack-cli.git
synced 2026-09-18 23:43:49 +08:00
6a972a1f05
Turn the forked slack-mcp-server into a CLI so running many agents no
longer means one resident MCP process each. Every command is a
short-lived process that reads the shared on-disk cache.
- rename module to github.com/paymog/slack-cli (go install/homebrew/ldflags)
- internal/toolcall: invoke the upstream tool handlers in-process; the only
mcp-go coupling lives here, so pkg/handler and pkg/provider are reused
byte-for-byte (clean upstream merges, fork-and-extend)
- internal/{cli,cmds,config,credstore,runtime,output}: cobra command tree,
keyring-backed credential profiles, provider bootstrap, result printing
- 21 tools as subcommands (channels, conversations, users, usergroups,
saved, reactions, attachments, cache); write tools keep their env gating
- goreleaser + homebrew release workflow; ships a skills/slack-cli skill
- unit tests for config/credstore/toolcall; MCP server still builds
The MCP server (cmd/slack-mcp-server) is kept intact.
35 lines
1018 B
Go
35 lines
1018 B
Go
package cmds
|
|
|
|
import (
|
|
"github.com/paymog/slack-cli/internal/config"
|
|
"github.com/paymog/slack-cli/internal/runtime"
|
|
"github.com/paymog/slack-cli/pkg/handler"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func newAttachmentsCommand(cfg *config.Config) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "attachments",
|
|
Aliases: []string{"attachment", "files"},
|
|
Short: "Download attachment data (requires SLACK_MCP_ATTACHMENT_TOOL)",
|
|
}
|
|
cmd.AddCommand(attachmentsGetCommand(cfg))
|
|
return cmd
|
|
}
|
|
|
|
func attachmentsGetCommand(cfg *config.Config) *cobra.Command {
|
|
return &cobra.Command{
|
|
Use: "get <file_id>",
|
|
Short: "Download an attachment by file ID (Fxxxxxxxxxx); max 5MB",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
p, logger, err := runtime.PrepareRead(cmd.Context(), cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
h := handler.NewConversationsHandler(p, logger)
|
|
return emit(cmd, cfg, "attachment_get_data", h.FilesGetHandler, map[string]any{"file_id": args[0]})
|
|
},
|
|
}
|
|
}
|