feat: add tool draft msg
This commit is contained in:
parent
66bd1b7dcc
commit
4f19a2df15
3 changed files with 67 additions and 1 deletions
|
|
@ -28,10 +28,10 @@ The Model Context Protocol (MCP) is a system that lets AI apps, like Claude Desk
|
||||||
- [x] Get current user data
|
- [x] Get current user data
|
||||||
- [x] Get the list of dialogs (chats, channels, groups)
|
- [x] Get the list of dialogs (chats, channels, groups)
|
||||||
- [x] Get the list of (unread) messages in the given dialog
|
- [x] Get the list of (unread) messages in the given dialog
|
||||||
|
- [x] Draft a message
|
||||||
- [ ] Mark chanel as read
|
- [ ] Mark chanel as read
|
||||||
- [ ] Retrieve messages by date and time
|
- [ ] Retrieve messages by date and time
|
||||||
- [ ] Get the list of contacts
|
- [ ] Get the list of contacts
|
||||||
- [ ] Draft a message
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
|
||||||
54
internal/tg/draft.go
Normal file
54
internal/tg/draft.go
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
package tg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gotd/td/telegram/message"
|
||||||
|
"github.com/gotd/td/tg"
|
||||||
|
mcp "github.com/metoro-io/mcp-golang"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DraftArguments struct {
|
||||||
|
Name string `json:"name" jsonschema:"required,description=Name of the dialog"`
|
||||||
|
Text string `json:"text" jsonschema:"required,description=Plain text of the message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DraftResponse struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) SendDraft(args DraftArguments) (*mcp.ToolResponse, error) {
|
||||||
|
var ok bool
|
||||||
|
client := c.T()
|
||||||
|
if err := client.Run(context.Background(), func(ctx context.Context) (err error) {
|
||||||
|
api := client.API()
|
||||||
|
|
||||||
|
sender := message.NewSender(api)
|
||||||
|
inputPeer, err := sender.Resolve(args.Name).AsInputPeer(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to resolve name: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ok, err = api.MessagesSaveDraft(ctx, &tg.MessagesSaveDraftRequest{
|
||||||
|
Peer: inputPeer,
|
||||||
|
Message: args.Text,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get history: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to get history")
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(DraftResponse{Success: ok})
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to marshal response")
|
||||||
|
}
|
||||||
|
|
||||||
|
return mcp.NewToolResponse(mcp.NewTextContent(string(jsonData))), nil
|
||||||
|
}
|
||||||
12
serve.go
12
serve.go
|
|
@ -55,6 +55,13 @@ func serve(ctx context.Context, cmd *cli.Command) error {
|
||||||
|
|
||||||
log.Info().RawJSON("answer", []byte(answer.Content[0].TextContent.Text)).Msg("Check GetHistory: OK")
|
log.Info().RawJSON("answer", []byte(answer.Content[0].TextContent.Text)).Msg("Check GetHistory: OK")
|
||||||
|
|
||||||
|
answer, err = client.SendDraft(tg.DraftArguments{Name: os.Getenv("TG_TEST_USERNAME"), Text: "test draft"})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("send draft: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().RawJSON("answer", []byte(answer.Content[0].TextContent.Text)).Msg("Check SendDraft: OK")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,6 +80,11 @@ func serve(ctx context.Context, cmd *cli.Command) error {
|
||||||
return fmt.Errorf("register dialogs tool: %w", err)
|
return fmt.Errorf("register dialogs tool: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = server.RegisterTool("tg_send", "Send draft message to dialog (channel, user)", client.SendDraft)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("register dialogs tool: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := server.Serve(); err != nil {
|
if err := server.Serve(); err != nil {
|
||||||
return fmt.Errorf("serve: %w", err)
|
return fmt.Errorf("serve: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue